searchBrowser.py (5790B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\browsers\searchBrowser.py 2 from collections import defaultdict 3 import localization 4 from eve.client.script.ui.control.entries.util import GetFromClass 5 from eve.client.script.ui.control.listgroup import ListGroup 6 from eve.client.script.ui.shared.fittingScreen.browsers.browserUtil import GetTypesByMetaGroups, ShoulAddMetaGroupFolder, GetMetaGroupNameAndEntry, GetScrollListFromTypeListInNodedata, GetScrollListFromTypeList 7 from eve.client.script.ui.shared.fittingScreen.browsers.chargesBrowserUtil import GetValidChargeTypeIDs 8 from eve.client.script.ui.shared.fittingScreen.browsers.filterSettings import BrowserModuleSettings, BrowserChargeSettings 9 from eve.client.script.ui.shared.fittingScreen.browsers.filtering import GetValidTypeIDs 10 from eve.common.lib import appConst as const 11 from utillib import KeyVal 12 specialItemGroups = (const.metaGroupStoryline, 13 const.metaGroupFaction, 14 const.metaGroupOfficer, 15 const.metaGroupDeadspace) 16 17 class SearchBrowserListProvider(object): 18 19 def __init__(self, searchFittingHelper, onDropDataFunc, moduleFilterSetting = None, chargeFilterSetting = None): 20 self.searchFittingHelper = searchFittingHelper 21 self.onDropDataFunc = onDropDataFunc 22 self.marketGroups = sm.GetService('marketutils').GetMarketGroups() 23 self.moduleFilterSetting = moduleFilterSetting or BrowserModuleSettings() 24 self.chargeFilterSetting = chargeFilterSetting or BrowserChargeSettings() 25 26 def GetValidTypeIDs(self): 27 typeIDs = self.searchFittingHelper.GetSearcableTypeIDs(self.marketGroups) 28 validTypeIDs = GetValidTypeIDs(typeIDs, self.searchFittingHelper, self.moduleFilterSetting) 29 return validTypeIDs 30 31 def GetSearchTerm(self): 32 return self.moduleFilterSetting.text_filter.get().lower() 33 34 def GetSearchResults(self): 35 searchTerm = self.GetSearchTerm() 36 if not searchTerm: 37 return [] 38 scrollList = [] 39 validTypeIDs = self.GetValidTypeIDs() 40 allMarketGroups = self.marketGroups[None] 41 myCategories, typeIDsByCategoryID = self.GetCategoryDicts(allMarketGroups, validTypeIDs) 42 if len(typeIDsByCategoryID) > 1: 43 scrollList += self.GetSearchCatagoryEntries(typeIDsByCategoryID, myCategories) 44 else: 45 for categoryID, categoryTypeIDs in typeIDsByCategoryID.iteritems(): 46 fakeNodeData = KeyVal(typeIDs=categoryTypeIDs, sublevel=-1, categoryID=categoryID) 47 results = self.GetSeachCategorySubContent(fakeNodeData) 48 scrollList.extend(results) 49 50 return scrollList 51 52 def GetCategoryDicts(self, allMarketGroups, validTypeIDs): 53 typeIDsByCategoryID = defaultdict(list) 54 myCategories = {} 55 for typeID in validTypeIDs: 56 topMarketCategory = self.searchFittingHelper.GetMarketCategoryForType(typeID, allMarketGroups) 57 if topMarketCategory is None: 58 continue 59 typeIDsByCategoryID[topMarketCategory.marketGroupID].append(typeID) 60 myCategories[topMarketCategory.marketGroupID] = topMarketCategory 61 62 return (myCategories, typeIDsByCategoryID) 63 64 def GetSearchCatagoryEntries(self, typeIDsByCategoryID, myCategories): 65 scrollList = [] 66 for categoryID, categoryTypeIDs in typeIDsByCategoryID.iteritems(): 67 category = myCategories[categoryID] 68 group = GetFromClass(ListGroup, {'GetSubContent': self.GetSeachCategorySubContent, 69 'label': category.marketGroupName, 70 'id': ('searchGroups', categoryID), 71 'showlen': 0, 72 'sublevel': 0, 73 'state': 'locked', 74 'BlockOpenWindow': True, 75 'categoryID': category.marketGroupID, 76 'typeIDs': categoryTypeIDs, 77 'iconID': category.iconID, 78 'hint': category.description}) 79 scrollList.append(group) 80 81 return scrollList 82 83 def GetSeachCategorySubContent(self, nodedata, *args): 84 typeIDs = nodedata.typeIDs 85 typesByMetaGroupID = GetTypesByMetaGroups(typeIDs) 86 categoryID = nodedata.categoryID 87 scrollList = [] 88 for metaGroupID, typeIDList in sorted(typesByMetaGroupID.items()): 89 shoulAddMetaGroupFolder = ShoulAddMetaGroupFolder(metaGroupID) 90 if shoulAddMetaGroupFolder: 91 metaGroupLabelAndEntry = self.GetSearchSubGroup(metaGroupID, typeIDList, nodedata=nodedata, categoryID=categoryID) 92 scrollList.append(metaGroupLabelAndEntry) 93 else: 94 standardTypes = GetScrollListFromTypeList(typeIDList, -1, self.onDropDataFunc) 95 for entry in standardTypes: 96 scrollList.append((' %s' % entry.label, entry)) 97 98 scrollList = [ item[1] for item in localization.util.Sort(scrollList, key=lambda x: x[0]) ] 99 return scrollList 100 101 def GetSearchSubGroup(self, metaGroupID, typeIDList, nodedata = 0, categoryID = None, *args): 102 labelAndEntry = GetMetaGroupNameAndEntry(metaGroupID, typeIDList, nodedata, subContentFunc=GetScrollListFromTypeListInNodedata, onDropDataFunc=self.onDropDataFunc, idTuple=('fittingSearchGroups', (metaGroupID, categoryID))) 103 return labelAndEntry 104 105 106 class SearchBrowserListProviderCharges(SearchBrowserListProvider): 107 108 def GetValidTypeIDs(self): 109 typeIDs = self.searchFittingHelper.GetSearcableChargeTypeIDs(self.marketGroups) 110 validTypeIDs = GetValidChargeTypeIDs(typeIDs, self.searchFittingHelper, self.moduleFilterSetting, self.chargeFilterSetting) 111 return validTypeIDs 112 113 def GetSearchTerm(self): 114 return self.chargeFilterSetting.text_filter.get().lower()