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

panelRequiredFor.py (5049B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\info\panels\panelRequiredFor.py
      2 import eveformat
      3 import evetypes
      4 import localization
      5 from carbonui import uiconst
      6 from carbonui.primitives.container import Container
      7 from eve.client.script.ui.control.entries.item import Item
      8 from eve.client.script.ui.control.entries.util import GetFromClass
      9 from eve.client.script.ui.control.toggleButtonGroup import ToggleButtonGroup
     10 from eve.client.script.ui.control.eveScroll import Scroll
     11 from eve.client.script.ui.control.listgroup import ListGroup
     12 from evetypes.skills import get_required_skills_index
     13 from omega.client.clone_grade_svc import get_clone_grade_svc
     14 
     15 class RequiredForScrollController:
     16 
     17     def __init__(self):
     18         self.skillSvc = sm.GetService('skills')
     19 
     20     def GetRequiredForScrollList(self, typeID, skillLevel):
     21         typeIndex = get_required_skills_index().get(typeID, {})
     22         typesByMarketAndMetaGroups = typeIndex.get(skillLevel, {})
     23         marketGroupIDs = [ marketGroupID for marketGroupID in typesByMarketAndMetaGroups.iterkeys() ]
     24         return self._GetScrollList(marketGroupIDs, skillLevel, typeID)
     25 
     26     def _GetScrollList(self, marketGroupIDs, skillLevel, typeID):
     27         scrolllist = []
     28         for marketGroupID in marketGroupIDs:
     29             marketGroup = cfg.GetMarketGroup(marketGroupID)
     30             scrolllist.append(GetFromClass(ListGroup, data={'GetSubContent': self._GetRequiredForLevelGroupSubContent,
     31              'label': marketGroup.marketGroupName,
     32              'skillLevel': int(skillLevel),
     33              'sublevel': 0,
     34              'showlen': False,
     35              'typeID': typeID,
     36              'marketGroupID': marketGroupID,
     37              'id': ('skillGroups_group', marketGroupID),
     38              'state': 'locked',
     39              'iconID': marketGroup.iconID,
     40              'openByDefault': True}))
     41 
     42         return scrolllist
     43 
     44     def GetUnlockTypeIDsByMarketGroup(self, typeID, skillLevel):
     45         ret = {}
     46         typesByMarketAndMetaGroupID = self.skillSvc.GetTypesUnlockedByTrainingToLevel(typeID, skillLevel)
     47         for marketGroupID, typesByMetaGroupID in typesByMarketAndMetaGroupID.iteritems():
     48             ret[marketGroupID] = self.GetRequiredForTypeIDs(typesByMetaGroupID)
     49 
     50         return ret
     51 
     52     def _GetRequiredForLevelGroupSubContent(self, data, *args):
     53         skillTypeID = data['typeID']
     54         skillLevel = data['skillLevel']
     55         skillMarketGroup = data['marketGroupID']
     56         typeIndex = get_required_skills_index().get(skillTypeID, {})
     57         typesByMetaGroupID = typeIndex.get(skillLevel, {})[skillMarketGroup]
     58         typeIDs = self.GetRequiredForTypeIDs(typesByMetaGroupID)
     59         return self.GetTypeScrollList(typeIDs, subLevel=1)
     60 
     61     def GetTypeScrollList(self, typeIDs, subLevel = 0):
     62         scrollList = []
     63         for typeID in typeIDs:
     64             scrollList.append(GetFromClass(Item, {'label': evetypes.GetName(typeID),
     65              'sublevel': subLevel,
     66              'typeID': typeID,
     67              'showinfo': True,
     68              'getIcon': True,
     69              'showTooltip': False,
     70              'disableIcon': get_clone_grade_svc().is_restricted_for_alpha(typeID)}))
     71 
     72         return scrollList
     73 
     74     def GetRequiredForTypeIDs(self, typesByMetaGroupID):
     75         requiredForTypeIDs = []
     76         for metaGroupID, typeIDs in sorted(typesByMetaGroupID.iteritems(), key=lambda x: x[0]):
     77             for typeID in typeIDs:
     78                 if not evetypes.IsPublished(typeID):
     79                     continue
     80                 requiredForTypeIDs.append(typeID)
     81 
     82         return requiredForTypeIDs
     83 
     84 
     85 class PanelRequiredFor(Container):
     86 
     87     def ApplyAttributes(self, attributes):
     88         Container.ApplyAttributes(self, attributes)
     89         self.typeID = attributes.typeID
     90         self.controller = RequiredForScrollController()
     91         self.skillSvc = sm.GetService('skills')
     92 
     93     def Load(self):
     94         self.Flush()
     95         toggleButtonCont = Container(name='btnGroupCont', parent=self, align=uiconst.TOTOP, height=35)
     96         btnGroup = ToggleButtonGroup(parent=toggleButtonCont, align=uiconst.CENTER, height=toggleButtonCont.height, width=300, padding=(10, 4, 10, 3), callback=self.LoadRequiredForLevel)
     97         for level in xrange(1, 6):
     98             hint = localization.GetByLabel('UI/InfoWindow/RequiredForLevelButtonHint', skillName=evetypes.GetName(self.typeID), level=level)
     99             typeIndex = get_required_skills_index().get(self.typeID, {})
    100             typesByMarketAndMetaGroupID = typeIndex.get(level, {})
    101             isDisabled = not bool(typesByMarketAndMetaGroupID)
    102             btnGroup.AddButton(btnID=level, label=eveformat.number_roman(level), hint=hint, isDisabled=isDisabled)
    103 
    104         self.scroll = Scroll(name='scroll', parent=self, padding=uiconst.defaultPadding)
    105         btnGroup.SelectFirst()
    106 
    107     def LoadRequiredForLevel(self, level, *args):
    108         scrolllist = self.controller.GetRequiredForScrollList(self.typeID, level)
    109         self.scroll.Load(fixedEntryHeight=27, contentList=scrolllist)