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

chargesBrowserUtil.py (7608B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\browsers\chargesBrowserUtil.py
      2 import blue
      3 import carbonui.const as uiconst
      4 import evetypes
      5 import metaGroups
      6 from carbonui.primitives.line import Line
      7 from carbonui.util.sortUtil import SortListOfTuples
      8 from eve.client.script.ui.control.entries.item import Item
      9 from eve.client.script.ui.control.entries.line import Line as ListentryLine
     10 from eve.client.script.ui.control.entries.util import GetFromClass
     11 from eve.client.script.ui.control.listgroup import ListGroup
     12 from eve.client.script.ui.shared.fittingScreen import AMMO_FAVORITE_CONFIG
     13 from eve.client.script.ui.shared.fittingScreen.settingUtil import GetAllAmmoFavorites
     14 from eve.client.script.ui.shared.market.entries import GetHintWithAvgPrice
     15 from eve.common.lib import appConst as const
     16 from eveservices.menu import GetMenuService
     17 from fsdBuiltData.common.iconIDs import GetIconFile
     18 from localization import GetByLabel
     19 from menu import MenuLabel
     20 
     21 class ChargeBrowserListProvider(object):
     22 
     23     def __init__(self, dblClickFunc, onDropDataFunc, reloadFunc):
     24         self.dblClickFunc = dblClickFunc
     25         self.onDropDataFunc = onDropDataFunc
     26         self.reloadFunc = reloadFunc
     27 
     28     def GetChargesScrollList(self, moduleTypeID, chargeTypeIDs):
     29         godma = sm.GetService('godma')
     30         scrolllist = []
     31         factionChargeIDs = set()
     32         otherChargeIDs = set()
     33         for eachTypeID in chargeTypeIDs:
     34             metaGroup = evetypes.GetMetaGroupID(eachTypeID)
     35             if metaGroup == const.metaGroupFaction:
     36                 factionChargeIDs.add(eachTypeID)
     37             else:
     38                 otherChargeIDs.add(eachTypeID)
     39 
     40         if chargeTypeIDs:
     41             scrolllist.append(GetFromClass(ListGroup, {'GetSubContent': self._GetFavoritesContent,
     42              'label': GetByLabel('UI/Fitting/FittingWindow/FavoriteAmmo'),
     43              'id': ('ammobrowser', 'favorites'),
     44              'showlen': 0,
     45              'chargeTypeIDs': chargeTypeIDs,
     46              'sublevel': 0,
     47              'showicon': 'hide',
     48              'state': 'locked',
     49              'BlockOpenWindow': True,
     50              'DropData': self._DropOnFavorites,
     51              'moduleTypeID': moduleTypeID}))
     52             scrolllist.append(GetFromClass(HorizontalLine, {'height': 2}))
     53         scrolllist += self._GetScrollListFromTypeList(moduleTypeID, otherChargeIDs)
     54         if factionChargeIDs:
     55             scrolllist.append(GetFromClass(ListGroup, {'GetSubContent': self._GetAmmoSubContent,
     56              'label': metaGroups.get_name(const.metaGroupFaction),
     57              'id': ('ammobrowser', 'factionChargeIDs'),
     58              'showlen': 0,
     59              'chargeTypeIDs': factionChargeIDs,
     60              'sublevel': 0,
     61              'showicon': GetIconFile(metaGroups.get_icon_id(const.metaGroupFaction)),
     62              'state': 'locked',
     63              'BlockOpenWindow': True,
     64              'moduleTypeID': moduleTypeID}))
     65         return scrolllist
     66 
     67     def _GetFavoritesContent(self, nodedata, *args):
     68         moduleTypeID = nodedata.moduleTypeID
     69         typeIDs = nodedata.chargeTypeIDs
     70         favoriteChargeIDs = set()
     71         allFavorites = GetAllAmmoFavorites()
     72         for eachTypeID in typeIDs:
     73             if eachTypeID in allFavorites:
     74                 favoriteChargeIDs.add(eachTypeID)
     75 
     76         return self._GetScrollListFromTypeList(moduleTypeID, favoriteChargeIDs, sublevel=1, isFavorite=True)
     77 
     78     def _GetAmmoSubContent(self, nodedata, *args):
     79         moduleTypeID = nodedata.moduleTypeID
     80         typeIDs = nodedata.chargeTypeIDs
     81         return self._GetScrollListFromTypeList(moduleTypeID, typeIDs, sublevel=1)
     82 
     83     def _GetScrollListFromTypeList(self, moduleTypeID, chargeTypeIDs, sublevel = 0, isFavorite = False):
     84         scrolllist = []
     85         for eachTypeID in chargeTypeIDs:
     86             label = evetypes.GetName(eachTypeID)
     87             techLevel = evetypes.GetTechLevel(eachTypeID)
     88             scrolllist.append(((techLevel, label), GetFromClass(ChargeItem, {'label': label,
     89               'typeID': eachTypeID,
     90               'itemID': None,
     91               'getIcon': 1,
     92               'OnDropData': self.onDropDataFunc,
     93               'OnDblClick': (self.dblClickFunc, moduleTypeID, eachTypeID),
     94               'sublevel': sublevel,
     95               'GetMenu': self._GetChargeMenu,
     96               'isFavorite': isFavorite,
     97               'ignoreRightClick': True})))
     98 
     99         scrolllist = SortListOfTuples(scrolllist)
    100         return scrolllist
    101 
    102     def _GetChargeMenu(self, entry, *args):
    103         node = entry.sr.node
    104         typeID = entry.typeID
    105         selectedNodes = node.scroll.GetSelectedNodes(node)
    106         removableTypeIDs = set()
    107         notRemovableTypeIDs = set()
    108         for eachNode in selectedNodes:
    109             if node.get('isFavorite', False):
    110                 removableTypeIDs.add(eachNode.typeID)
    111             else:
    112                 notRemovableTypeIDs.add(eachNode.typeID)
    113 
    114         m = []
    115         if notRemovableTypeIDs:
    116             m += [(MenuLabel('UI/Fitting/FittingWindow/AddToFavorites'), self._AddToFavorite, (notRemovableTypeIDs,))]
    117         if removableTypeIDs:
    118             m += [(MenuLabel('UI/Fitting/FittingWindow/RemoveFromFavorites'), self._RemoveFromFavorite, (removableTypeIDs,))]
    119         if len(selectedNodes) == 1:
    120             m += GetMenuService().GetMenuFromItemIDTypeID(None, typeID, includeMarketDetails=True)
    121         return m
    122 
    123     def _RemoveFromFavorite(self, removableTypeIDs):
    124         allFavoritesSet = GetAllAmmoFavorites()
    125         for eachTypeID in removableTypeIDs:
    126             allFavoritesSet.discard(eachTypeID)
    127 
    128         settings.user.ui.Set(AMMO_FAVORITE_CONFIG, allFavoritesSet)
    129         self.reloadFunc()
    130 
    131     def _AddToFavorite(self, typeIDsSet):
    132         allFavoritesSet = GetAllAmmoFavorites()
    133         allFavoritesSet.update(typeIDsSet)
    134         settings.user.ui.Set(AMMO_FAVORITE_CONFIG, allFavoritesSet)
    135         self.reloadFunc()
    136 
    137     def _DropOnFavorites(self, dragObj, nodes):
    138         typeIDs = set()
    139         for eachNode in nodes:
    140             try:
    141                 if not IsCharge(eachNode.typeID):
    142                     continue
    143                 typeIDs.add(eachNode.typeID)
    144             except:
    145                 continue
    146 
    147         self._AddToFavorite(typeIDs)
    148 
    149 
    150 def IsCharge(typeID):
    151     return evetypes.GetCategoryID(typeID) == const.categoryCharge
    152 
    153 
    154 class HorizontalLine(ListentryLine):
    155 
    156     def ApplyAttributes(self, attributes):
    157         ListentryLine.ApplyAttributes(self, attributes)
    158         Line(parent=self, align=uiconst.TOTOP, color=(1, 1, 1, 0.07))
    159 
    160 
    161 def GetValidChargeTypeIDs(typeList, searchFittingHelper, moduleFilterSettings = None, chargeFilterSettings = None):
    162     filterString = chargeFilterSettings.text_filter.get().lower() if chargeFilterSettings else None
    163     ret = set()
    164     for typeID in typeList:
    165         try:
    166             blue.pyos.BeNice()
    167             if not filterString or filterString in searchFittingHelper.GetTypeName(typeID):
    168                 ret.add(typeID)
    169         except Exception:
    170             pass
    171 
    172     return ret
    173 
    174 
    175 def GetValidSpecialAssetsChargeTypeIDs(typeList, searchFittingHelper, moduleFilterSettings = None, chargeFilterSettings = None):
    176     validTypeIDs = set()
    177     for typeID in typeList:
    178         try:
    179             if searchFittingHelper.IsCharge(typeID):
    180                 validTypeIDs.add(typeID)
    181         except Exception:
    182             pass
    183 
    184     return GetValidChargeTypeIDs(validTypeIDs, searchFittingHelper, moduleFilterSettings, chargeFilterSettings)
    185 
    186 
    187 class ChargeItem(Item):
    188 
    189     def GetHint(self):
    190         return GetHintWithAvgPrice(self.sr.node)