panelIndustry.py (10471B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\info\panels\panelIndustry.py 2 from carbon.common.script.sys.serviceConst import ROLE_GML 3 from carbonui import uiconst 4 from carbonui.primitives.containerAutoSize import ContainerAutoSize 5 from carbonui.util.color import Color 6 from carbonui.util.various_unsorted import SortListOfTuples 7 from eve.client.script.ui.control.entries.button import ButtonEntry 8 from eve.client.script.ui.control.entries.generic import Generic 9 from eve.client.script.ui.control.entries.item import Item 10 from eve.client.script.ui.control.entries.label_text import LabelTextSides 11 from eve.client.script.ui.control.entries.util import GetFromClass 12 from eve.client.script.ui.control.listgroup import ListGroup 13 from eve.client.script.ui.control.toggleButtonGroupButton import ToggleButtonGroupButtonIcon 14 from eve.client.script.ui.shared.cloneGrade import ORIGIN_INDUSTRY 15 from eve.client.script.ui.shared.cloneGrade.omegaRestrictedEntry import OmegaRestrictedEntry 16 from eve.client.script.ui.shared.industry import industryUIConst 17 from eve.client.script.ui.shared.industry.activitySelectionButtons import ActivityToggleButtonGroupButton 18 from eve.common.lib import appConst as const 19 import evetypes 20 import industry 21 import localization 22 from carbonui.primitives.container import Container 23 from eve.client.script.ui.control.toggleButtonGroup import ToggleButtonGroup 24 from eve.client.script.ui.control.eveLabel import EveLabelMediumBold 25 from eve.client.script.ui.control.eveScroll import Scroll 26 from omega.client.clone_grade_svc import get_clone_grade_svc 27 from shipfitting.multiBuyUtil import BuyMultipleTypesWithQty 28 29 class PanelIndustry(Container): 30 __notifyevents__ = ['OnSubscriptionChanged'] 31 32 def ApplyAttributes(self, attributes): 33 sm.RegisterNotify(self) 34 Container.ApplyAttributes(self, attributes) 35 self.bpData = attributes.bpData 36 37 def Load(self): 38 self.Flush() 39 topCont = ContainerAutoSize(parent=self, align=uiconst.TOTOP, padding=(0, 2, 0, 2)) 40 btnGroup = ToggleButtonGroup(parent=topCont, align=uiconst.CENTER, height=38, width=248, callback=self.LoadActivity, btnClass=ToggleButtonGroupButtonIcon) 41 for activityID in industry.ACTIVITIES: 42 isDisabled = activityID not in self.bpData.activities 43 color = industryUIConst.GetActivityColor(activityID) 44 color = Color(*color).SetBrightness(0.5).GetRGBA() 45 btnGroup.AddButton(activityID, iconPath=industryUIConst.ACTIVITY_ICONS_LARGE[activityID], iconSize=26, colorSelected=color, isDisabled=isDisabled, btnClass=ActivityToggleButtonGroupButton, activityID=activityID) 46 47 self.activityNameLabel = EveLabelMediumBold(name='label', parent=self, align=uiconst.TOTOP, padding=(6, 0, 0, 0)) 48 self.omegaEntry = OmegaRestrictedEntry(parent=self, align=uiconst.TOTOP, height=30, state=uiconst.UI_HIDDEN, padding=(4, 2, 4, 0), origin=ORIGIN_INDUSTRY) 49 self.scroll = Scroll(parent=self, padding=const.defaultPadding) 50 activityID = self.GetSelectedActivityID(activityID) 51 btnGroup.SelectByID(activityID) 52 53 def GetSelectedActivityID(self, activityID): 54 activityID = settings.char.ui.Get('blueprintShowInfoActivityID', 0) 55 if activityID not in self.bpData.activities: 56 activityID = sorted(self.bpData.activities.keys())[0] 57 return activityID 58 59 def LoadActivity(self, activityID, *args): 60 settings.char.ui.Set('blueprintShowInfoActivityID', activityID) 61 self.job = industry.Job(self.bpData, activityID) 62 self.activityNameLabel.text = self.job.activity.GetHint() 63 self.UpdateOmegaEntry(activityID) 64 entries = [] 65 entries.append(GetFromClass(LabelTextSides, {'line': 1, 66 'label': localization.GetByLabel('UI/Industry/TimePerRun'), 67 'text': self.job.GetJobTimeLeftLabel()})) 68 if self.job.activityID == industry.COPYING: 69 entries.append(GetFromClass(LabelTextSides, {'line': 1, 70 'label': localization.GetByLabel('UI/Industry/MaxRunsPerCopy'), 71 'text': self.bpData.maxProductionLimit})) 72 if self.job.activityID == industry.INVENTION: 73 entries.append(GetFromClass(LabelTextSides, {'line': 1, 74 'label': localization.GetByLabel('UI/Industry/JobSuccessProbability'), 75 'text': '%s%%' % (self.job.probability * 100)})) 76 entries.append(GetFromClass(ListGroup, {'GetSubContent': self.LoadOutcome, 77 'label': self.GetOutcomeCaption(), 78 'groupItems': self.job.products, 79 'id': 'outcome', 80 'showicon': 'hide', 81 'showlen': False, 82 'state': 'locked', 83 'BlockOpenWindow': True})) 84 entries.append(GetFromClass(ListGroup, {'GetSubContent': self.LoadSkills, 85 'label': localization.GetByLabel('UI/Industry/RequiredSkills'), 86 'groupItems': [ (skill.typeID, skill.level, skill.GetHint()) for skill in self.job.required_skills ], 87 'id': 'skills', 88 'showicon': 'hide', 89 'noItemText': localization.GetByLabel('UI/Common/None'), 90 'state': 'locked', 91 'BlockOpenWindow': True})) 92 entries.append(GetFromClass(ListGroup, {'GetSubContent': self.LoadMaterialGroups, 93 'label': localization.GetByLabel('UI/Industry/RequiredInputMaterials'), 94 'groupItems': self.job.GetMaterialsByGroups(), 95 'id': 'materialGroups', 96 'showicon': 'hide', 97 'noItemText': localization.GetByLabel('UI/Common/None'), 98 'state': 'locked', 99 'BlockOpenWindow': True})) 100 self.scroll.Load(contentList=entries) 101 102 def UpdateOmegaEntry(self, activityID): 103 if self.bpData.activities[activityID].IsOmegaActivity() and not get_clone_grade_svc().is_omega_with_grace_period(): 104 self.omegaEntry.Show() 105 else: 106 self.omegaEntry.Hide() 107 108 def GetOutcomeCaption(self): 109 if len(self.job.products) > 1: 110 if self.job.activityID == industry.INVENTION: 111 return localization.GetByLabel('UI/Industry/OutcomeOptions') 112 return localization.GetByLabel('UI/Industry/Outcome') 113 114 def LoadOutcome(self, nodedata, *args): 115 scrolllist = [] 116 if self.job.activityID in (industry.MANUFACTURING, industry.REACTION): 117 for product in nodedata.groupItems: 118 scrolllist.append(GetFromClass(Item, {'itemID': None, 119 'typeID': product.typeID, 120 'label': product.GetHint(), 121 'getIcon': 1})) 122 123 elif self.job.activityID == industry.RESEARCH_MATERIAL: 124 label = localization.GetByLabel('UI/Industry/StepMaterialEfficiency', stepSize=industry.STEP_MATERIAL_EFFICIENCY) 125 scrolllist.append(GetFromClass(Generic, {'label': label, 126 'sublevel': 1})) 127 elif self.job.activityID == industry.RESEARCH_TIME: 128 label = localization.GetByLabel('UI/Industry/StepTimeEfficiency', stepSize=industry.STEP_TIME_EFFICIENCY) 129 scrolllist.append(GetFromClass(Generic, {'label': label, 130 'sublevel': 1})) 131 elif self.job.activityID == industry.COPYING: 132 typeID = self.bpData.blueprintTypeID 133 label = evetypes.GetName(typeID) 134 entry = GetFromClass(Item, {'itemID': None, 135 'typeID': typeID, 136 'label': label, 137 'getIcon': 1, 138 'isCopy': True}) 139 scrolllist.append(entry) 140 elif self.job.activityID == industry.INVENTION: 141 for product in nodedata.groupItems: 142 entry = GetFromClass(Item, {'itemID': None, 143 'typeID': product.typeID, 144 'label': product.GetName(), 145 'getIcon': 1, 146 'isCopy': True}) 147 scrolllist.append(entry) 148 149 return scrolllist 150 151 def LoadSkills(self, nodedata, *args): 152 scrolllist = [] 153 infoSvc = sm.GetService('info') 154 skills = [] 155 for typeID, level, hint in nodedata.groupItems: 156 skills.append((typeID, level)) 157 158 if skills: 159 skills = sorted(skills) 160 skillScrollList = infoSvc.GetReqSkillInfo(None, skills) 161 scrolllist += skillScrollList 162 return scrolllist 163 164 def LoadMaterialGroups(self, nodeData, *args): 165 scrollList = [] 166 for industryGroupID, materials in nodeData.groupItems: 167 label = industryUIConst.LABEL_BY_INDUSTRYGROUP.get(industryGroupID, None) 168 scrollList.append(GetFromClass(ListGroup, {'GetSubContent': self.LoadMaterialGroup, 169 'label': localization.GetByLabel(label), 170 'groupItems': [ (material.typeID, material.quantity, material.GetHint()) for material in materials ], 171 'id': 'materials_%s' % industryGroupID, 172 'sublevel': 1, 173 'iconID': industryUIConst.ICON_BY_INDUSTRYGROUP[industryGroupID], 174 'hint': localization.GetByLabel(industryUIConst.HINT_BY_INDUSTRYGROUP[industryGroupID]), 175 'state': 'locked', 176 'BlockOpenWindow': True})) 177 178 if self.job.materials: 179 scrollList.append(GetFromClass(ButtonEntry, {'label': '', 180 'caption': localization.GetByLabel('UI/Market/MarketQuote/BuyAll'), 181 'OnClick': self.BuyMultipleTypes})) 182 if self.job.materials and session.role & ROLE_GML == ROLE_GML: 183 items = [ (material.typeID, material.quantity) for material in self.job.materials ] 184 infoSvc = sm.GetService('info') 185 scrollList.append(GetFromClass(ButtonEntry, {'label': 'GM: Give me these materials', 186 'caption': 'Give', 187 'OnClick': infoSvc.DoCreateMaterials, 188 'args': (items, '', 10)})) 189 return scrollList 190 191 def LoadMaterialGroup(self, nodedata, *args): 192 scrolllist = [] 193 for typeID, quantity, hint in nodedata.groupItems: 194 entry = GetFromClass(Item, {'itemID': None, 195 'typeID': typeID, 196 'label': hint, 197 'getIcon': 1, 198 'sublevel': 2}) 199 scrolllist.append((typeID, entry)) 200 201 scrolllist = SortListOfTuples(scrolllist) 202 return scrolllist 203 204 def BuyMultipleTypes(self, *args): 205 buyDict = {material.typeID:material.quantity for material in self.job.materials} 206 BuyMultipleTypesWithQty(buyDict) 207 208 def OnSubscriptionChanged(self): 209 self.Load()