NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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()