browserUtil.py (4522B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\browsers\browserUtil.py 2 import eveicon 3 from carbonui.control.contextMenu.menuEntryData import MenuEntryData 4 from collections import defaultdict 5 import inventorycommon.const as invConst 6 from eve.client.script.ui.control.entries.util import GetFromClass 7 from eve.client.script.ui.shared.fittingScreen import fittingSignals 8 from eve.client.script.ui.shared.market.entries import GenericMarketItem, MarketMetaGroupEntry 9 from menu import MenuLabel 10 from eve.client.script.ui.shared.fitting.ghostFittingHelpers import TryPreviewFitItemOnMouseAction 11 import evetypes 12 from fsdBuiltData.common.iconIDs import GetIconFile 13 from localization import GetByLabel 14 from localization.util import Sort 15 import metaGroups 16 from eveservices.menu import GetMenuService 17 from eve.common.lib import appConst as const 18 BROWSER_WIDTH = 240 19 validMarketMetaGroups = (const.metaGroupStoryline, 20 const.metaGroupFaction, 21 const.metaGroupOfficer, 22 const.metaGroupDeadspace) 23 validCategoriesForMetaGroups = (const.categoryModule, 24 const.categoryStructureModule, 25 const.categoryDrone, 26 const.categoryStarbase) 27 AUTO_FITTED_SERVICES_BY_STRUCTURE_TYPE = {invConst.typeUpwellSmallStargate: invConst.typeStandupStargateEngine, 28 invConst.typeUpwellCynosuralSystemJammer: invConst.typeStandupCynosuralJammerI, 29 invConst.typeUpwellCynosuralBeacon: invConst.typeStandupCynosuralGeneratorI} 30 31 def ShoulAddMetaGroupFolder(metaGroupID): 32 if metaGroupID in validMarketMetaGroups: 33 return True 34 return False 35 36 37 def GetTypesByMetaGroups(typeIDs): 38 typesByMetaGroupID = defaultdict(list) 39 for typeID in typeIDs: 40 if evetypes.GetVariationParentTypeIDOrNone(typeID) is None: 41 metaGroupID = None 42 else: 43 metaGroupID = evetypes.GetMetaGroupID(typeID) 44 if metaGroupID == const.metaGroupStoryline: 45 metaGroupID = const.metaGroupFaction 46 typesByMetaGroupID[metaGroupID].append(typeID) 47 48 return typesByMetaGroupID 49 50 51 def GetMetaGroupNameAndEntry(metaGroupID, typeIDList, nodedata, subContentFunc, onDropDataFunc, idTuple): 52 label = _GetLabelForMarketMetaGroup(metaGroupID) 53 groupEntry = GetFromClass(MarketMetaGroupEntry, {'GetSubContent': subContentFunc, 54 'label': label, 55 'id': idTuple, 56 'showlen': 0, 57 'metaGroupID': metaGroupID, 58 'sublevel': nodedata.sublevel + 1, 59 'showicon': GetIconFile(metaGroups.get_icon_id(metaGroupID)), 60 'state': 'locked', 61 'BlockOpenWindow': True, 62 'typeIDs': typeIDList, 63 'DropData': onDropDataFunc, 64 'onDropDataFunc': onDropDataFunc}) 65 labelAndEntry = (label, groupEntry) 66 return labelAndEntry 67 68 69 def _GetLabelForMarketMetaGroup(metaGroupID): 70 if metaGroupID in (const.metaGroupStoryline, const.metaGroupFaction): 71 label = GetByLabel('UI/Market/FactionAndStoryline') 72 else: 73 label = metaGroups.get_name(metaGroupID) 74 return label 75 76 77 def GetScrollListFromTypeListInNodedata(nodedata, *args): 78 invTypeIDs = nodedata.typeIDs 79 sublevel = nodedata.sublevel 80 onDropDataFunc = nodedata.onDropDataFunc 81 return GetScrollListFromTypeList(invTypeIDs, sublevel, onDropDataFunc) 82 83 84 def GetScrollListFromTypeList(invTypeIDs, sublevel, onDropDataFunc): 85 subList = [] 86 for invTypeID in invTypeIDs: 87 subList.append((evetypes.GetName(invTypeID), GetFromClass(GenericMarketItem, {'label': evetypes.GetName(invTypeID), 88 'sublevel': sublevel + 1, 89 'ignoreRightClick': 1, 90 'showinfo': 1, 91 'typeID': invTypeID, 92 'showNameHint': True, 93 'OnDropData': onDropDataFunc, 94 'GetMenu': GetMenuForNode, 95 'OnDblClick': (TryFit, invTypeID)}))) 96 97 subList = [ item[1] for item in Sort(subList, key=lambda x: x[0]) ] 98 return subList 99 100 101 def GetMenuForNode(node): 102 m = [MenuEntryData(MenuLabel('UI/Fitting/FittingWindow/FindTypeInBrowser'), lambda : fittingSignals.on_find_type_in_browser(node.typeID), texturePath=eveicon.search)] 103 m += GetMenuService().GetMenuFromItemIDTypeID(None, node.typeID, includeMarketDetails=True) 104 return m 105 106 107 def TryFit(entry, invTypeID): 108 TryPreviewFitItemOnMouseAction(None, oldWindow=False, force=True) 109 ghostFittingSvc = sm.GetService('ghostFittingSvc') 110 if evetypes.GetCategoryID(invTypeID) == const.categoryCharge: 111 ghostFittingSvc.TryFitFakeAmmoToAllModulesFitted([invTypeID]) 112 else: 113 return ghostFittingSvc.TryFitModuleToOneSlot(invTypeID)