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

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()