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

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)