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

upgradeEntry.py (16891B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\sov\sovHub\upgradeEntry.py
      2 import carbonui.text.styles
      3 from carbon.common.script.util.commonutils import StripTags
      4 from collections import OrderedDict
      5 import carbonui
      6 import eveicon
      7 import evetypes
      8 from carbonui.control.buttonIcon import ButtonIcon
      9 from carbonui.control.dragdrop.dragdata import TypeDragData
     10 from carbonui.control.scrollentries import SE_BaseClassCore
     11 from carbonui.fontconst import EVE_MEDIUM_FONTSIZE
     12 from carbonui.primitives.container import Container
     13 from carbonui.primitives.fill import Fill
     14 from carbonui.primitives.line import Line
     15 from carbonui.primitives.sprite import Sprite
     16 from carbonui.uianimations import animations
     17 from carbonui.util.various_unsorted import GetAttrs
     18 from eve.client.script.ui import eveColor
     19 from eve.client.script.ui.control.baseListEntry import BaseListEntryCustomColumns
     20 import carbonui.const as uiconst
     21 from eve.client.script.ui.control.scrollUtil import ColumnInfo
     22 from eve.client.script.ui.control.toggleSwitch import ToggleSwitchCompact
     23 from eveexceptions import ExceptionEater
     24 from eveservices.menu import GetMenuService
     25 from localization import GetByLabel
     26 from carbonui.uicore import uicore
     27 SPRITE_SIZE = 12
     28 MOVE_SPRITE_SIZE = 16
     29 AVAILABLE_WIDTH = 430
     30 
     31 class UpgradeEntry(BaseListEntryCustomColumns):
     32     default_name = 'UpgradeEntry'
     33     isDragObject = True
     34     default_height = 24
     35     headerInfo = d = OrderedDict()
     36     d['priority'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnPriority', 'Tooltips/StructureUI/SovHubPriority')
     37     d['upgrade'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnUpgrade', 'Tooltips/StructureUI/SovHubInstalledUpgrades', False)
     38     d['power'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnPowerAllocation', 'Tooltips/StructureUI/SovHubAllocation')
     39     d['workforce'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnWorkforceAllocation', 'Tooltips/StructureUI/SovHubAllocation')
     40     d['upkeep'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnUpkeep', 'Tooltips/StructureUI/SovHubUpkeep')
     41     d['startup'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnStartupCost', 'Tooltips/StructureUI/SovHubStartup')
     42     d['gauge'] = ColumnInfo(-1, None)
     43     d['state'] = ColumnInfo('UI/Sovereignty/SovHub/HubWnd/ColumnState', 'Tooltips/StructureUI/SovHubState')
     44     d['trash'] = ColumnInfo(-2, None)
     45 
     46     def ApplyAttributes(self, attributes):
     47         self._resourcesMissingFill = None
     48         BaseListEntryCustomColumns.ApplyAttributes(self, attributes)
     49         self.posIndicatorLine = PosIndicatorLine(parent=self, align=uiconst.TOTOP_NOPUSH, height=3)
     50         self.entryController = self.node.entryController
     51         self.hubController = self.node.hubController
     52         self.AddAnchoredIcons()
     53         self.AddPriority()
     54         self.AddUpgradeName()
     55         self.AddPowerAllocation()
     56         self.AddWorkForceAllocation()
     57         self.AddUpkeep()
     58         self.AddStartup()
     59         self.AddStateGauge()
     60         self.AddOnlineState()
     61         self.UpdateOnlineState()
     62         self.AddTrashColumn()
     63         self.UpdateEffectiveState()
     64 
     65     def AddAnchoredIcons(self):
     66         self.moveSprite = Sprite(parent=self, align=carbonui.Align.CENTERLEFT, pos=(0,
     67          0,
     68          MOVE_SPRITE_SIZE,
     69          MOVE_SPRITE_SIZE), texturePath=eveicon.caret_up_down, pickState=carbonui.PickState.ON, hint=GetByLabel('UI/Sovereignty/SovHub/Upgrades/MoveUpgrades'), color=eveColor.TUNGSTEN_GREY)
     70         self.moveSprite.GetDragData = self.GetDragData
     71         self.moveSprite.isDragObject = True
     72         self.moveSprite.Hide()
     73         self.deleteSprite = ButtonIcon(parent=self, align=carbonui.Align.CENTERRIGHT, width=16, height=16, iconSize=16, texturePath=self.entryController.GetRemoveTexturePath(), hint=GetByLabel('UI/Sovereignty/SovHub/Upgrades/DeleteUpgrade'), func=self.entryController.DeleteUpgrade)
     74         self.deleteSprite.Hide()
     75 
     76     def AddPriority(self):
     77         self.priortyCol = self.AddColumnContainer()
     78         self.priorityLabel = carbonui.text.styles.TextBody(name='priorityLabel', parent=self.priortyCol, text=self.entryController.priorityText, align=carbonui.Align.CENTERRIGHT, left=SPRITE_SIZE + 8)
     79 
     80     def AddUpgradeName(self):
     81         self.upgradeNameCol = self.AddColumnContainer()
     82         self.groupSprite = Sprite(parent=self.upgradeNameCol, align=carbonui.Align.CENTERLEFT, pos=(0,
     83          0,
     84          SPRITE_SIZE,
     85          SPRITE_SIZE), texturePath=self.entryController.typeListTexture, hint=self.entryController.typeListHint, color=eveColor.TUNGSTEN_GREY)
     86         self.upgradeNameLabel = carbonui.text.styles.TextBody(name='upgradeName', parent=self.upgradeNameCol, text=self.entryController.name, align=carbonui.Align.CENTERLEFT, left=SPRITE_SIZE + 8)
     87 
     88     def AddPowerAllocation(self):
     89         self.powerCol = self.AddColumnContainer()
     90         self.powerSprite = Sprite(parent=self.powerCol, align=carbonui.Align.CENTERRIGHT, pos=(0,
     91          0,
     92          SPRITE_SIZE,
     93          SPRITE_SIZE), texturePath=eveicon.power, color=eveColor.TUNGSTEN_GREY)
     94         self.powerLabel = carbonui.text.styles.TextBody(name='powerLabel', parent=self.powerCol, text=self.entryController.powerText, align=carbonui.Align.CENTERRIGHT, left=self.powerSprite.width)
     95 
     96     def AddWorkForceAllocation(self):
     97         self.workforceCol = self.AddColumnContainer()
     98         self.workforceSprite = Sprite(parent=self.workforceCol, align=carbonui.Align.CENTERRIGHT, pos=(0,
     99          0,
    100          SPRITE_SIZE,
    101          SPRITE_SIZE), texturePath=eveicon.workforce, color=eveColor.TUNGSTEN_GREY)
    102         self.workforceLabel = carbonui.text.styles.TextBody(name='workforceLabel', parent=self.workforceCol, text=self.entryController.workforceText, align=carbonui.Align.CENTERRIGHT, left=self.workforceSprite.width)
    103 
    104     def AddUpkeep(self):
    105         self.upkeepCol = self.AddColumnContainer()
    106         fuelTexturePath = self.entryController.fuelTexturePath
    107         self.uppkeepSprite = Sprite(parent=self.upkeepCol, align=carbonui.Align.CENTERRIGHT, pos=(uiconst.LABELTABMARGIN,
    108          0,
    109          SPRITE_SIZE,
    110          SPRITE_SIZE), texturePath=fuelTexturePath, color=eveColor.TUNGSTEN_GREY)
    111         self.uppkeepSprite.hint = evetypes.GetName(self.entryController.fuelTypeID)
    112         self.upkeepLabel = carbonui.text.styles.TextBody(name='upkeepLabel', parent=self.upkeepCol, text=self.entryController.upkeepText, align=carbonui.Align.CENTERRIGHT, left=self.uppkeepSprite.left + self.uppkeepSprite.width)
    113 
    114     def AddOnlineState(self):
    115         self.onlineStateCol = self.AddColumnContainer()
    116         self.onlineStateLabel = carbonui.text.styles.TextBody(name='upkeepLabel', parent=self.onlineStateCol, text='', align=carbonui.Align.CENTERLEFT, left=uiconst.LABELTABMARGIN)
    117         self.onlineStateLabel.pickState = carbonui.PickState.ON
    118 
    119     def AddStartup(self):
    120         self.startupCol = self.AddColumnContainer()
    121         fuelTexturePath = self.entryController.fuelTexturePath
    122         self.startupSprite = Sprite(parent=self.startupCol, align=carbonui.Align.CENTERRIGHT, pos=(uiconst.LABELTABMARGIN,
    123          0,
    124          SPRITE_SIZE,
    125          SPRITE_SIZE), texturePath=fuelTexturePath, color=eveColor.TUNGSTEN_GREY)
    126         self.startupSprite.hint = evetypes.GetName(self.entryController.fuelTypeID)
    127         self.startupLabel = carbonui.text.styles.TextBody(name='startupLabel', parent=self.startupCol, text=self.entryController.startupText, align=carbonui.Align.CENTERRIGHT, left=self.startupSprite.left + self.startupSprite.width)
    128 
    129     def AddStateGauge(self):
    130         col = self.AddColumnContainer()
    131         self.onlineToggle = ToggleSwitchCompact(parent=col, checked=self.entryController.isConfiguredOnline, align=carbonui.Align.CENTER)
    132         self.onlineToggle.on_switch_changed.connect(self.ChangeOnlineState)
    133         self.onlineToggle.GetHint = self.GetToggleHint
    134 
    135     def ConstructResourcesMissingFill(self):
    136         if not self._resourcesMissingFill or self._resourcesMissingFill.destroyed:
    137             self._resourcesMissingFill = Fill(name='_resourcesMissingFill', bgParent=self, color=eveColor.DANGER_RED[:3] + (0.0,))
    138 
    139     def OnColumnResize(self, newCols):
    140         for i, width in enumerate(newCols):
    141             self.columns[i].width = width - 1
    142 
    143     @classmethod
    144     def GetHeaders(cls):
    145         return [ x.columnText for x in cls.headerInfo.itervalues() ]
    146 
    147     @classmethod
    148     def GetHeaderText(cls, i):
    149         key = cls.headerInfo.keys()[i]
    150         headerInfo = cls.headerInfo[key]
    151         return headerInfo.columnText.strip()
    152 
    153     @classmethod
    154     def GetHeadersHint(cls, i):
    155         key = cls.headerInfo.keys()[i]
    156         headerInfo = cls.headerInfo[key]
    157         return headerInfo.hintText
    158 
    159     def GetDragData(self, *args):
    160         self.sr.node.scroll.SelectNode(self.sr.node)
    161         dragData = [UpgradeTypeDragData(self.sr.node.typeID, self.sr.node.idx)]
    162         return dragData
    163 
    164     def OnMouseEnter(self, *args):
    165         showRed = self.entryController.installedUpgradeData.isInRestrictedPowerState or self.entryController.installedUpgradeData.isConfiguredOffline and self.entryController.isLackingSomething
    166         self._showHilite = not showRed
    167         super(UpgradeEntry, self).OnMouseEnter(args)
    168         self.moveSprite.Show()
    169         self.deleteSprite.Show()
    170         if showRed:
    171             self.UpdateResourcesMissingFill(True)
    172 
    173     def OnMouseExit(self, *args):
    174         self._showHilite = True
    175         super(UpgradeEntry, self).OnMouseExit(args)
    176         self.moveSprite.Hide()
    177         self.deleteSprite.Hide()
    178         self.UpdateResourcesMissingFill(False)
    179 
    180     def OnDropData(self, dragObj, nodes, *args):
    181         self.posIndicatorLine.HidePosIndicator()
    182         if GetAttrs(self, 'parent', 'OnDropData'):
    183             self.parent.OnDropData(dragObj, nodes, idx=self.sr.node.idx)
    184 
    185     def OnDragEnter(self, dragObj, nodes, *args):
    186         dropError = self.hubController.GetDropError(nodes[0])
    187         if dropError:
    188             color = eveColor.DANGER_RED
    189         else:
    190             color = eveColor.ICE_WHITE
    191         self.posIndicatorLine.ShowPosIndicator(color)
    192 
    193     def OnDragExit(self, *args):
    194         self.posIndicatorLine.HidePosIndicator()
    195 
    196     def UpdateResourcesMissingFill(self, on):
    197         if on:
    198             self.ConstructResourcesMissingFill()
    199             animations.FadeIn(self._resourcesMissingFill, endVal=0.1)
    200         else:
    201             if not self._resourcesMissingFill or self._resourcesMissingFill.destroyed:
    202                 return
    203             animations.FadeOut(self._resourcesMissingFill)
    204 
    205     def ChangeOnlineState(self, *args):
    206         newState = not self.entryController.isConfiguredOnline
    207         self.hubController.SetOnlineState(self.entryController.typeID, newState)
    208 
    209     def UpdateOnlineState(self):
    210         if self.entryController.isConfiguredOnline:
    211             self.onlineToggle.SetChecked(True, False)
    212         else:
    213             self.onlineToggle.SetChecked(False, False)
    214         if self.entryController.isPowerStateFunctional:
    215             newOpacity = 1.0
    216         else:
    217             newOpacity = 0.5
    218         for element in [self.priortyCol,
    219          self.upgradeNameCol,
    220          self.powerCol,
    221          self.workforceCol,
    222          self.upkeepCol,
    223          self.startupCol,
    224          self.onlineStateCol]:
    225             element.opacity = newOpacity
    226 
    227     def AddTrashColumn(self):
    228         col = self.AddColumnContainer()
    229 
    230     def UpdateEffectiveState(self):
    231         text, hint = self.entryController.GetOnlineStateTextAndHints()
    232         self.onlineStateLabel.text = text
    233         self.onlineStateLabel.hint = hint
    234         entryTextColor = self.entryController.GetEntryTextColor()
    235         self.priorityLabel.SetRGBA(*entryTextColor)
    236         self.groupSprite.SetRGBA(*entryTextColor)
    237         self.upgradeNameLabel.SetRGBA(*entryTextColor)
    238         self.priorityLabel.SetRGBA(*entryTextColor)
    239         self.powerSprite.SetRGBA(*self.entryController.GetPowerColor(eveColor.TUNGSTEN_GREY))
    240         self.powerLabel.SetRGBA(*self.entryController.GetPowerColor())
    241         self.workforceSprite.SetRGBA(*self.entryController.GetWorkforceColor(eveColor.TUNGSTEN_GREY))
    242         self.workforceLabel.SetRGBA(*self.entryController.GetWorkforceColor())
    243         self.uppkeepSprite.SetRGBA(*self.entryController.GetReagentColor(eveColor.TUNGSTEN_GREY))
    244         self.upkeepLabel.SetRGBA(*self.entryController.GetReagentColor())
    245         self.startupSprite.SetRGBA(*self.entryController.GetReagentStartupColor(eveColor.TUNGSTEN_GREY))
    246         self.startupLabel.SetRGBA(*self.entryController.GetReagentStartupColor())
    247 
    248     def GetMenu(self):
    249         typeID = self.entryController.typeID
    250         itemID = self.entryController.itemID
    251         return GetMenuService().GetMenuFromItemIDTypeID(itemID, typeID, includeMarketDetails=True)
    252 
    253     @staticmethod
    254     def GetColWidths(node, idx = None):
    255         if node.decoClass != UpgradeEntry:
    256             return
    257         LABEL_PARAMS = (EVE_MEDIUM_FONTSIZE, 0, 0)
    258         controller = node.entryController
    259 
    260         def GetWidthFor(idx):
    261             if idx == 0:
    262                 return 16 + uicore.font.MeasureTabstops([(controller.priorityText,) + LABEL_PARAMS])[0]
    263             if idx == 1:
    264                 return SPRITE_SIZE + 8 + uicore.font.MeasureTabstops([(controller.name,) + LABEL_PARAMS])[0]
    265             if idx == 2:
    266                 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.powerText,) + LABEL_PARAMS])[0]
    267             if idx == 3:
    268                 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.workforceText,) + LABEL_PARAMS])[0]
    269             if idx == 4:
    270                 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.upkeepText,) + LABEL_PARAMS])[0]
    271             if idx == 5:
    272                 return SPRITE_SIZE + uicore.font.MeasureTabstops([(controller.startupText,) + LABEL_PARAMS])[0]
    273             if idx == 6:
    274                 return 40
    275             if idx == 7:
    276                 text, _ = controller.GetOnlineStateTextAndHints()
    277                 return uicore.font.MeasureTabstops([(text,) + LABEL_PARAMS])[0]
    278             if idx == 8:
    279                 return 20
    280             return 50
    281 
    282         if idx is None:
    283             colWidths = [ GetWidthFor(i) for i in xrange(len(UpgradeEntry.headerInfo)) ]
    284             return colWidths
    285         return [GetWidthFor(idx)]
    286 
    287     def GetToggleHint(self):
    288         if self.entryController.isConfiguredOffline and self.entryController.isLackingSomething:
    289             return self.GetDisabledToggleHint()
    290         return ToggleSwitchCompact.GetHint(self.onlineToggle)
    291 
    292     def GetDisabledToggleHint(self):
    293         return GetByLabel('UI/Sovereignty/SovHub/Upgrades/LackingResourcesHint')
    294 
    295     @classmethod
    296     def GetCopyData(cls, node):
    297         controller = node.entryController
    298         onlineState, _ = controller.GetOnlineStateTextAndHints()
    299         fuelType = evetypes.GetName(controller.fuelTypeID) if controller.fuelTypeID else ''
    300         textList = [controller.priorityText,
    301          controller.typeListHint,
    302          controller.name,
    303          controller.powerValue or '',
    304          controller.workforceValue or '',
    305          controller.staticData.consumption_per_hour,
    306          controller.staticData.startup_cost,
    307          fuelType,
    308          StripTags(onlineState)]
    309         return '\t'.join([ unicode(x) for x in textList ])
    310 
    311     def Close(self):
    312         with ExceptionEater('Closing UpgradeEntry'):
    313             self.onlineToggle.on_switch_changed.disconnect(self.ChangeOnlineState)
    314             self.entryController = None
    315             self.hubController = None
    316         super(UpgradeEntry, self).Close()
    317 
    318 
    319 class PosIndicatorLine(Container):
    320 
    321     def ApplyAttributes(self, attributes):
    322         super(PosIndicatorLine, self).ApplyAttributes(attributes)
    323         self.line = None
    324 
    325     def CheckConstructPosIndicatorLine(self):
    326         if not self.line:
    327             self.line = Line(parent=self, align=uiconst.TOTOP_NOPUSH, weight=2, state=uiconst.UI_DISABLED, opacity=0.0, idx=0)
    328 
    329     def ShowPosIndicator(self, color = None):
    330         self.CheckConstructPosIndicatorLine()
    331         color = color or eveColor.ICE_WHITE
    332         self.line.SetRGBA(*color)
    333 
    334     def HidePosIndicator(self):
    335         if self.line:
    336             self.line.opacity = 0.0
    337 
    338 
    339 class UpgradeTypeDragData(TypeDragData):
    340 
    341     def __init__(self, typeID, idx):
    342         super(UpgradeTypeDragData, self).__init__(typeID)
    343         self.idx = idx
    344 
    345 
    346 class UpgradeLastEntry(SE_BaseClassCore):
    347     __guid__ = 'UpgradeLastEntry'
    348     default_state = uiconst.UI_DISABLED
    349 
    350     def ApplyAttributes(self, attributes):
    351         SE_BaseClassCore.ApplyAttributes(self, attributes)
    352         self.posIndicator = PosIndicatorLine(parent=self)
    353 
    354     def Load(self, node):
    355         pass
    356 
    357     def ShowIndicator(self, color):
    358         self.posIndicator.ShowPosIndicator(color)
    359 
    360     def HideIndicator(self):
    361         self.posIndicator.HidePosIndicator()
    362 
    363     def GetDynamicHeight(self, width):
    364         return 2