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

facilityEntry.py (7162B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\industry\facilityEntry.py
      2 from evePathfinder.core import IsUnreachableJumpCount
      3 from math import pi
      4 import carbonui.const as uiconst
      5 import eveformat.client
      6 import industry
      7 import localization
      8 import structures
      9 from carbonui.primitives.gradientSprite import GradientSprite
     10 from carbonui.primitives.sprite import Sprite
     11 from eve.client.script.ui.control.baseListEntry import BaseListEntryCustomColumns
     12 from eve.client.script.ui.control.eveLabel import Label
     13 from eve.client.script.ui.shared.industry import industryUIConst
     14 from eve.client.script.ui.shared.industry.industryUIConst import VIEWMODE_ICONLIST
     15 from eve.client.script.ui.shared.industry.installationActivityIcon import InstallationActivityIcon
     16 from eveservices.menu import GetMenuService
     17 from utillib import KeyVal
     18 
     19 class FacilityEntry(BaseListEntryCustomColumns):
     20     default_name = 'FacilityEntry'
     21 
     22     def ApplyAttributes(self, attributes):
     23         BaseListEntryCustomColumns.ApplyAttributes(self, attributes)
     24         self.facilityData = self.node.facilityData
     25         self.item = self.node.item
     26         self.viewMode = self.node.viewMode
     27         self.showTax = self.node.activityID in industry.ACTIVITIES
     28         self.AddColumnJumps()
     29         self.AddColumnText(self.GetSecurityLabel())
     30         self.AddColumnText(self.facilityData.GetName())
     31         self.AddColumnsActivities()
     32         if self.showTax:
     33             self.AddColumnsTax()
     34         self.AddColumnText(self.facilityData.GetTypeName())
     35         self.AddColumnText(self.facilityData.GetOwnerName())
     36 
     37     def AddColumnJumps(self):
     38         jumps = self.node.jumps
     39         if not IsUnreachableJumpCount(jumps):
     40             self.AddColumnText(jumps)
     41         else:
     42             col = self.AddColumnContainer()
     43             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])
     44 
     45     def AddColumnsActivities(self):
     46         costIndexes = self.facilityData.GetCostIndexByActivityID()
     47         iconSize = 20 if self.viewMode == VIEWMODE_ICONLIST else 14
     48         for i, activityID in enumerate(industry.ACTIVITIES):
     49             col = self.AddColumnContainer()
     50             isEnabled = activityID in self.facilityData.activities
     51             isFilterTarget = isEnabled and (self.node.activityID not in self.facilityData.activities or self.node.activityID == activityID)
     52             btn = InstallationActivityIcon(parent=col, align=uiconst.CENTER, pos=(0,
     53              -1,
     54              iconSize,
     55              iconSize), iconSize=iconSize, activityID=activityID, isEnabled=isEnabled, isFilterTarget=isFilterTarget, facilityData=self.facilityData)
     56             systemCostIndex = costIndexes.get(activityID, None)
     57             if systemCostIndex:
     58                 maxIndex = sm.GetService('facilitySvc').GetMaxActivityModifier(activityID)
     59                 value = systemCostIndex / maxIndex
     60                 self.ConstructSystemCostGradient(col, value)
     61 
     62     def AddColumnsTax(self):
     63         taxRates = self.facilityData.GetServiceTaxes()
     64         text = ''
     65         for serviceID, tax in taxRates.iteritems():
     66             if tax is None or structures.GetActivityID(serviceID) != self.node.activityID:
     67                 continue
     68             text += '%.2f/' % tax
     69 
     70         self.AddColumnText(text[:-1])
     71 
     72     def ConstructSystemCostGradient(self, col, systemCostIndex):
     73         GradientSprite(name='systemCostGradient', align=uiconst.TOLEFT_PROP, state=uiconst.UI_DISABLED, parent=col, width=systemCostIndex, padding=0, rgbData=((0.0, industryUIConst.COLOR_SYSTEMCOSTINDEX[:3]),), rotation=pi / 2, alphaData=((0.0, 1.0),
     74          (0.075, 1.0),
     75          (0.075001, 0.2),
     76          (0.8, 0.0)))
     77 
     78     @staticmethod
     79     def GetDynamicHeight(node, width):
     80         if node.viewMode == VIEWMODE_ICONLIST:
     81             return 28
     82         else:
     83             return 20
     84 
     85     @staticmethod
     86     def GetDefaultColumnWidth():
     87         return {localization.GetByLabel('UI/Industry/Facility'): 230,
     88          localization.GetByLabel('UI/Common/Owner'): 230}
     89 
     90     @staticmethod
     91     def GetFixedColumns(viewMode):
     92         ret = {}
     93         if viewMode == VIEWMODE_ICONLIST:
     94             iconSize = 36
     95             ret[localization.GetByLabel('UI/Industry/Activities')] = 154
     96         else:
     97             iconSize = 22
     98             ret[localization.GetByLabel('UI/Industry/Activities')] = 130
     99         ret.update({localization.GetByLabel('UI/Industry/ActivityManufacturing'): iconSize,
    100          localization.GetByLabel('UI/Industry/ActivityCopying'): iconSize,
    101          localization.GetByLabel('UI/Industry/ActivityMaterialEfficiencyResearch'): iconSize,
    102          localization.GetByLabel('UI/Industry/ActivityTimeEfficiencyResearch'): iconSize,
    103          localization.GetByLabel('UI/Industry/ActivityInvention'): iconSize,
    104          localization.GetByLabel('UI/Industry/ActivityReaction'): iconSize})
    105         return ret
    106 
    107     def GetSecurityLabel(self):
    108         return eveformat.solar_system_security_status(self.facilityData.solarSystemID)
    109 
    110     @staticmethod
    111     def GetColumnSortValues(facilityData, jumps, activityID, showTax):
    112         if facilityData.facilityID == session.stationid:
    113             jumps = -1
    114         costIndexes = facilityData.GetCostIndexByActivityID()
    115         costIndexValues = tuple((costIndexes.get(activityID, None) for activityID in industry.ACTIVITIES))
    116         ret = (jumps, sm.GetService('map').GetSecurityStatus(facilityData.solarSystemID), facilityData.GetName()) + costIndexValues
    117         if showTax:
    118             taxes = []
    119             taxRates = facilityData.GetServiceTaxes()
    120             for serviceID, tax in taxRates.iteritems():
    121                 if tax is None or structures.GetActivityID(serviceID) != activityID:
    122                     continue
    123                 taxes.append(tax)
    124 
    125             if taxes:
    126                 facilityTaxSortValue = float(sum(taxes)) / len(taxes)
    127             else:
    128                 facilityTaxSortValue = facilityData.tax
    129             ret += (facilityTaxSortValue,)
    130         ret += (facilityData.GetTypeName(), facilityData.GetOwnerName().lower())
    131         return ret
    132 
    133     @staticmethod
    134     def GetHeaders(showTax = False):
    135         activityTexts = [ localization.GetByLabel(industryUIConst.ACTIVITY_NAMES[activityID]) for activityID in industry.ACTIVITIES ]
    136         ret = [localization.GetByLabel('UI/Common/Jumps'), localization.GetByLabel('UI/Common/Security'), localization.GetByLabel('UI/Industry/Facility')] + activityTexts
    137         if showTax:
    138             ret.append(localization.GetByLabel('UI/Industry/Tax'))
    139         ret.extend([localization.GetByLabel('UI/Industry/FacilityType'), localization.GetByLabel('UI/Common/Owner')])
    140         return tuple(ret)
    141 
    142     def GetMenu(self):
    143         return GetMenuService().GetMenuFromItemIDTypeID(itemID=self.facilityData.facilityID, typeID=self.facilityData.typeID)
    144 
    145     def GetDragData(self):
    146         ret = KeyVal(__guid__='xtriui.ListSurroundingsBtn', typeID=self.facilityData.typeID, itemID=self.facilityData.facilityID, label=self.facilityData.GetName())
    147         return (ret,)