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)