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

blueprintEntry.py (12156B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\industry\blueprintEntry.py
      2 from evePathfinder.core import IsUnreachableJumpCount
      3 from carbonui.const import TOALL, UI_DISABLED
      4 from menu import MenuLabel
      5 from carbonui.primitives.container import Container
      6 from carbonui.primitives.gradientSprite import GradientSprite
      7 from carbonui.util.color import Color
      8 from eve.client.script.ui.control.baseListEntry import BaseListEntryCustomColumns
      9 from eve.client.script.ui.control.eveLabel import Label
     10 from eve.client.script.ui.control.itemIcon import ItemIcon
     11 from eve.client.script.ui.shared.industry import industryUIConst, GetTypeName, GetActivitySum
     12 from eve.client.script.ui.shared.industry.views.containersMETE import ContainerTE, ContainerME
     13 import industry
     14 import localization
     15 import carbonui.const as uiconst
     16 from eve.client.script.ui.shared.industry.industryUIConst import ACTIVITY_ICONS_SMALL, ACTIVITY_NAMES, VIEWMODE_ICONLIST, VIEWMODE_LIST
     17 from carbonui.primitives.sprite import Sprite
     18 import eve.client.script.ui.util.uix as uix
     19 from carbonui.control.buttonIcon import ButtonIcon
     20 import telemetry
     21 from carbonui.uicore import uicore
     22 from eveservices.menu import GetMenuService
     23 
     24 class BlueprintEntry(BaseListEntryCustomColumns):
     25     default_name = 'BlueprintEntry'
     26 
     27     def ApplyAttributes(self, attributes):
     28         BaseListEntryCustomColumns.ApplyAttributes(self, attributes)
     29         self.bpData = self.node.bpData
     30         self.item = self.node.item
     31         self.activityCallback = self.node.activityCallback
     32         self.activityButtons = []
     33         self.itemIcon = None
     34         self.viewMode = self.node.viewMode
     35         self.AddColumnBlueprintLabel()
     36         self.AddColumnMaterialEfficiency()
     37         self.AddColumnTimeEfficiency()
     38         self.AddColumnRunsRemaining()
     39         self.columnActivities = self.AddColumnActivities()
     40         if self.node.showFacility:
     41             self.AddColumnJumps()
     42             self.AddColumnText(self.bpData.GetFacilityName())
     43         if self.node.showLocation:
     44             self.AddColumnText(self.bpData.GetLocationName())
     45         self.AddColumnText(self.bpData.GetGroupName())
     46         self.AddColumnText(self.bpData.GetAvailabilityText())
     47         self.OnJobStateChanged()
     48 
     49     def OnJobStateChanged(self, status = None):
     50         if status:
     51             isInstalled = industry.STATUS_UNSUBMITTED < status < industry.STATUS_COMPLETED
     52             if status in (industry.STATUS_INSTALLED, industry.STATUS_DELIVERED):
     53                 self.AnimFlash(Color.WHITE)
     54         else:
     55             isInstalled = self.bpData.IsInstalled()
     56         isImpounded = self.bpData.IsImpounded()
     57         disabled = isImpounded or isInstalled
     58         if isInstalled:
     59             opacity = 0.15
     60         elif isImpounded:
     61             opacity = 0.3
     62         else:
     63             opacity = 1.0
     64         for col in self.columns:
     65             col.opacity = opacity
     66 
     67         if disabled:
     68             self.columnActivities.Disable()
     69         else:
     70             self.columnActivities.Enable()
     71 
     72     def AnimFlash(self, color):
     73         width = 500
     74         flashCont = Container(parent=self, idx=0, align=uiconst.TOPLEFT, width=width, height=self.height)
     75         flashGradient = GradientSprite(bgParent=flashCont, rgbData=[(0, color[:3])], alphaData=[(0, 0.0), (0.9, 0.4), (1.0, 0.0)])
     76         arrows = Sprite(parent=flashCont, align=uiconst.CENTERLEFT, texturePath='res:/UI/Texture/Classes/Industry/CenterBar/arrows.png', pos=(0,
     77          0,
     78          375,
     79          self.height), color=color, opacity=0.15, tileX=True)
     80         duration = self.width / 600.0
     81         uicore.animations.MorphScalar(flashCont, 'left', -width, self.width + width, duration=duration, curveType=uiconst.ANIM_LINEAR)
     82         uicore.animations.FadeTo(flashCont, 0.0, 1.0, duration=duration, callback=flashCont.Close, curveType=uiconst.ANIM_WAVE)
     83 
     84     @staticmethod
     85     def GetDynamicHeight(node, width):
     86         if node.viewMode == VIEWMODE_ICONLIST:
     87             return 36
     88         else:
     89             return 22
     90 
     91     def AddColumnRunsRemaining(self):
     92         runsRemaining = self.bpData.runsRemaining
     93         if runsRemaining != -1:
     94             self.AddColumnText('%s' % runsRemaining)
     95         else:
     96             col = self.AddColumnContainer()
     97             Sprite(name='infinityIcon', parent=col, align=uiconst.CENTERLEFT, pos=(6, 0, 11, 6), texturePath='res:/UI/Texture/Classes/Industry/infinity.png', opacity=Label.default_color[3])
     98 
     99     def AddColumnJumps(self):
    100         jumps = self.node.jumps
    101         if not IsUnreachableJumpCount(jumps):
    102             self.AddColumnText(jumps)
    103         else:
    104             col = self.AddColumnContainer()
    105             Sprite(name='infinityIcon', parent=col, align=uiconst.CENTERLEFT, pos=(6, 0, 11, 6), texturePath='res:/UI/Texture/Classes/Industry/infinity.png', opacity=Label.default_color[3])
    106 
    107     def AddColumnBlueprintLabel(self):
    108         col = self.AddColumnContainer()
    109         if self.viewMode == VIEWMODE_LIST:
    110             texturePath, hint = uix.GetTechLevelIconPathAndHint(self.bpData.blueprintTypeID)
    111             if texturePath:
    112                 techIconSize = 16 if self.viewMode == VIEWMODE_ICONLIST else 12
    113                 Sprite(name='techIcon', parent=col, texturePath=texturePath, hint=hint, width=techIconSize, height=techIconSize)
    114         if self.viewMode == VIEWMODE_ICONLIST:
    115             iconSize = 32
    116             self.itemIcon = ItemIcon(parent=col, typeID=self.bpData.blueprintTypeID, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED, width=iconSize, bpData=self.bpData, height=iconSize, left=2)
    117         else:
    118             iconSize = 0
    119         Label(parent=col, text=self.bpData.GetLabel(), align=uiconst.CENTERLEFT, left=iconSize + 4, idx=0)
    120 
    121     def _AddColumnMETE(self, cls, value):
    122         col = self.AddColumnContainer()
    123         opacity = 0.5 if not value else 1.0
    124         isCompact = self.viewMode != VIEWMODE_ICONLIST
    125         gauge = cls(parent=col, align=TOALL, state=UI_DISABLED, padding=(3, 2, 3, 6), opacity=opacity, showBG=False, isCompact=isCompact)
    126         gauge.SetValue(value)
    127 
    128     def AddColumnMaterialEfficiency(self):
    129         value = self.bpData.materialEfficiency
    130         cls = ContainerME
    131         self._AddColumnMETE(cls, value)
    132 
    133     def AddColumnTimeEfficiency(self):
    134         value = self.bpData.timeEfficiency
    135         cls = ContainerTE
    136         self._AddColumnMETE(cls, value)
    137 
    138     def AddColumnActivities(self):
    139         col = self.AddColumnContainer()
    140         ICONSIZE = 20 if self.viewMode == VIEWMODE_ICONLIST else 14
    141         for i, activityID in enumerate(industry.ACTIVITIES):
    142             isEnabled = activityID in self.bpData.activities.keys()
    143             hint = ACTIVITY_NAMES.get(activityID) if isEnabled else 'UI/Industry/ActivityNotAvailable'
    144             opacity = 1.0
    145             if isEnabled and not (self.bpData.facility and self.bpData.facility.CanDoActivity(activityID, self.bpData.productTypeID)):
    146                 opacity = 0.4
    147             btn = ActivityButtonIcon(parent=col, align=uiconst.CENTERLEFT, pos=(6 + i * (ICONSIZE + 4),
    148              0,
    149              ICONSIZE + 4,
    150              ICONSIZE + 4), texturePath=ACTIVITY_ICONS_SMALL[activityID], iconSize=ICONSIZE, func=self.OnActivityBtn, args=(activityID, self.bpData), hint=localization.GetByLabel(hint), isHoverBGUsed=False, colorSelected=industryUIConst.GetActivityColor(activityID), iconEnabledOpacity=opacity)
    151             self.activityButtons.append(btn)
    152             if not isEnabled:
    153                 btn.Disable(0.05)
    154 
    155         return col
    156 
    157     def OnActivityBtn(self, activityID, bpData):
    158         self.activityCallback(self.bpData, activityID)
    159 
    160     def GetMenu(self):
    161         m = GetMenuService().GetMenuFromItemIDTypeID(self.bpData.blueprintID, self.bpData.blueprintTypeID, includeMarketDetails=True, invItem=self.item)
    162         label = MenuLabel('UI/Industry/Facility')
    163         m.append((label, GetMenuService().CelestialMenu(itemID=self.bpData.facilityID)))
    164         return m
    165 
    166     @staticmethod
    167     def GetDefaultColumnWidth():
    168         return {localization.GetByLabel('UI/Industry/Blueprint'): 230,
    169          localization.GetByLabel('UI/Industry/MaterialEfficiency'): 80,
    170          localization.GetByLabel('UI/Industry/TimeEfficiency'): 80,
    171          localization.GetByLabel('UI/Industry/Facility'): 200}
    172 
    173     @staticmethod
    174     def GetFixedColumns(viewMode):
    175         if viewMode == VIEWMODE_ICONLIST:
    176             return {localization.GetByLabel('UI/Industry/Activities'): 157}
    177         else:
    178             return {localization.GetByLabel('UI/Industry/Activities'): 120}
    179 
    180     @staticmethod
    181     def GetHeaders(showFacility = True, showLocation = True, showImpounded = False):
    182         ret = [localization.GetByLabel('UI/Industry/Blueprint'),
    183          localization.GetByLabel('UI/Industry/MaterialEfficiency'),
    184          localization.GetByLabel('UI/Industry/TimeEfficiency'),
    185          localization.GetByLabel('UI/Industry/RunsRemaining'),
    186          localization.GetByLabel('UI/Industry/Activities')]
    187         if showFacility:
    188             ret.extend((localization.GetByLabel('UI/Common/Jumps'), localization.GetByLabel('UI/Industry/Facility')))
    189         if showLocation:
    190             ret.append(localization.GetByLabel('UI/Industry/InventoryLocation'))
    191         ret.append(localization.GetByLabel('UI/Common/Group'))
    192         if showImpounded:
    193             ret.append(localization.GetByLabel('UI/ScienceAndIndustry/ScienceAndIndustryWindow/Availability'))
    194         return ret
    195 
    196     @staticmethod
    197     @telemetry.ZONE_METHOD
    198     def GetColumnSortValues(bpData, jumps = None, showFacility = True, showLocation = True):
    199         activitySum = GetActivitySum(bpData.activities.keys())
    200         typeName = GetTypeName(bpData.blueprintTypeID)
    201         ret = [typeName.lower(),
    202          bpData.materialEfficiency,
    203          bpData.timeEfficiency,
    204          bpData.runsRemaining,
    205          activitySum]
    206         if showFacility:
    207             facilityName = bpData.GetFacilityName()
    208             if facilityName:
    209                 facilityName = facilityName.lower()
    210             ret.extend((jumps, facilityName))
    211         if showLocation:
    212             ret.append(bpData.GetLocationName())
    213         ret.append(bpData.GetGroupName())
    214         ret.append(bpData.GetAvailabilityText())
    215         return ret
    216 
    217     @telemetry.ZONE_METHOD
    218     def OnActivitySelected(self, itemID, activityID):
    219         for btn in self.activityButtons:
    220             if self.bpData.blueprintID == itemID and btn.activityID == activityID:
    221                 btn.SetSelected()
    222             else:
    223                 btn.SetDeselected()
    224 
    225     def GetDragData(self):
    226         ret = []
    227         nodes = self.sr.node.scroll.GetSelectedNodes(self.sr.node)
    228         for node in nodes:
    229             ret.append(node.bpData.GetDragData())
    230 
    231         return ret
    232 
    233     def OnDblClick(self, *args):
    234         sm.ScatterEvent('OnBlueprintEntryDblClicked')
    235 
    236     def OnMouseEnter(self, *args):
    237         BaseListEntryCustomColumns.OnMouseEnter(self, *args)
    238         if self.itemIcon:
    239             self.itemIcon.OnMouseEnter()
    240 
    241     def OnMouseExit(self, *args):
    242         BaseListEntryCustomColumns.OnMouseExit(self, *args)
    243         if self.itemIcon:
    244             self.itemIcon.OnMouseExit()
    245 
    246     @classmethod
    247     def GetCopyData(cls, node):
    248         bpData = node.bpData
    249         labelList = [bpData.GetLabel(),
    250          unicode(bpData.materialEfficiency),
    251          unicode(bpData.timeEfficiency),
    252          unicode(bpData.runsRemaining)]
    253         if node.showFacility:
    254             labelList += [unicode(node.jumps), bpData.GetFacilityName()]
    255         if node.showLocation:
    256             labelList += [bpData.GetLocationName()]
    257         labelList += [bpData.GetGroupName()]
    258         return '\t'.join(labelList)
    259 
    260 
    261 class ActivityButtonIcon(ButtonIcon):
    262 
    263     def ApplyAttributes(self, attributes):
    264         ButtonIcon.ApplyAttributes(self, attributes)
    265         if self.isActive:
    266             self.Enable()
    267         self.activityID, self.bpData = attributes.args
    268 
    269     def OnDblClick(self, *args):
    270         if uicore.uilib.Key(uiconst.VK_SHIFT):
    271             job = sm.GetService('industrySvc').CreateJob(self.bpData, self.activityID, self.bpData.facilityID)
    272             sm.GetService('industrySvc').InstallJob(job)