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

assetSafetyEntry.py (7652B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\assets\assetSafetyEntry.py
      2 from carbon.common.script.sys.serviceConst import ROLE_GML
      3 from carbon.common.script.util.linkUtil import GetShowInfoLink
      4 from carbonui import const as uiconst
      5 from carbonui.primitives.sprite import Sprite
      6 from eve.client.script.ui.control.baseListEntry import BaseListEntryCustomColumns
      7 from carbonui.control.button import Button
      8 from eve.client.script.ui.control.eveLabel import EveLabelMedium
      9 from eve.client.script.ui.control.themeColored import LabelThemeColored, FillThemeColored
     10 from eve.client.script.ui.shared.assets.assetSafetyDeliverWindow import AssetSafetyDeliverWindow
     11 from localization import GetByLabel
     12 from localization.formatters import FormatTimeIntervalShortWritten
     13 import blue
     14 
     15 class AssetSafetyEntry(BaseListEntryCustomColumns):
     16     default_name = 'AssetSafetyEntry'
     17     default_height = 34
     18     default_state = uiconst.UI_NORMAL
     19 
     20     def ApplyAttributes(self, attributes):
     21         BaseListEntryCustomColumns.ApplyAttributes(self, attributes)
     22         self.sr.label = EveLabelMedium(parent=self)
     23         self.sr.label.display = False
     24         safetyData = self.node.safetyData
     25         self.solarSystemID = safetyData['solarSystemID']
     26         self.assetWrapID = safetyData['assetWrapID']
     27         wrapName, systemName = AssetSafetyEntry.GetNameAndSystem(safetyData)
     28         solarSystemName = GetShowInfoLink(const.typeSolarSystem, systemName, self.solarSystemID)
     29         self.ejectTime = safetyData['ejectTime']
     30         self.daysUntilCanDeliverConst = safetyData['daysUntilCanDeliverConst']
     31         self.manualDeliveryTimestamp = self.ejectTime + self.daysUntilCanDeliverConst * const.DAY
     32         self.autoDeliveryTimestamp = self.ejectTime + safetyData['daysUntilAutoMoveConst'] * const.DAY
     33         self.nearestNPCStationInfo = safetyData['nearestNPCStationInfo']
     34         self.AddColumnText(wrapName)
     35         t = self.AddColumnText(solarSystemName)
     36         t.state = uiconst.UI_NORMAL
     37         self.AddColumnAssetSafetyDeliverButton()
     38         self.AddColumnAssetSafetyTimers()
     39         self.UpdateProgress()
     40 
     41     def GetMenu(self):
     42         menu = []
     43         if session.role & ROLE_GML:
     44             subMenu = [(str(self.assetWrapID), blue.pyos.SetClipboardData, (str(self.assetWrapID),))]
     45             subMenu.append(('Move Timer 5 days', self.MoveEjectTimeGM, (self.assetWrapID, 5)))
     46             subMenu.append(('Move Timer 30 days', self.MoveEjectTimeGM, (self.assetWrapID, 30)))
     47             menu.append(['GM Tools', subMenu])
     48         return menu
     49 
     50     def MoveEjectTimeGM(self, assetWrapID, days):
     51         sm.GetService('objectCaching').InvalidateCachedMethodCall('structureAssetSafety', 'GetStructuresICanDeliverTo')
     52         sm.GetService('objectCaching').InvalidateCachedMethodCall('structureAssetSafety', 'GetItemsInSafetyForCharacter')
     53         sm.GetService('objectCaching').InvalidateCachedMethodCall('structureAssetSafety', 'GetItemsInSafetyForCorp')
     54         sm.RemoteSvc('structureAssetSafety').MoveEjectTimeGM(assetWrapID, days)
     55 
     56     def GetDeliveryTimesLeft(self):
     57         now = blue.os.GetWallclockTime()
     58         solarSystemTimeLeft = self.manualDeliveryTimestamp - now
     59         autoDeliverTimeLeft = self.autoDeliveryTimestamp - now
     60         return (solarSystemTimeLeft, autoDeliverTimeLeft)
     61 
     62     def AddColumnAssetSafetyTimers(self):
     63         colContainer = self.AddColumnContainer()
     64         timerSprite = Sprite(name='timerSprite', parent=colContainer, align=uiconst.CENTERLEFT, pos=(0, 0, 24, 24), texturePath='res:/UI/Texture/classes/Inventory/hourglass.png')
     65         timerSprite.hint = GetByLabel('UI/Inventory/AssetSafety/AutoDeliveryHint')
     66         self.autoTimeLeft = EveLabelMedium(parent=colContainer, align=uiconst.CENTERLEFT, left=timerSprite.left + timerSprite.width + 4)
     67         nearestItemID = self.nearestNPCStationInfo['itemID']
     68         stationName = cfg.evelocations.Get(nearestItemID).name
     69         stationText = GetShowInfoLink(self.nearestNPCStationInfo['typeID'], stationName, nearestItemID)
     70         self.nearestNPCStationLabel = EveLabelMedium(parent=colContainer, align=uiconst.CENTERLEFT, text=stationText, left=150, state=uiconst.UI_NORMAL)
     71 
     72     def AddColumnAssetSafetyDeliverButton(self):
     73         solarSystemTimeLeft, autoDeliverTimeLeft = self.GetDeliveryTimesLeft()
     74         colContainer = self.AddColumnContainer()
     75         self.deliverBtn = DeliverButton(align=uiconst.CENTER, parent=colContainer, func=self.OnDeliverButton, label=GetByLabel('UI/Inventory/AssetSafety/DeliverTo'))
     76         self.deliverBtn.GetHint = self.GetDeliverBtnHint
     77         self.SetDeliverBtnState(solarSystemTimeLeft)
     78 
     79     def SetDeliverBtnState(self, solarSystemTimeLeft):
     80         if solarSystemTimeLeft > 0:
     81             self.deliverBtn.Disable()
     82             self.deliverBtn.disabled = False
     83         else:
     84             self.deliverBtn.Enable()
     85 
     86     def OnDeliverButton(self, *args):
     87         AssetSafetyDeliverWindow.Open(assetWrapID=self.assetWrapID, solarSystemID=self.solarSystemID, nearestNPCStationInfo=self.nearestNPCStationInfo, autoDeliveryTimestamp=self.autoDeliveryTimestamp, manualDeliveryTimestamp=self.manualDeliveryTimestamp)
     88 
     89     def GetDeliverBtnHint(self):
     90         solarSystemTimeLeft, autoDeliverTimeLeft = self.GetDeliveryTimesLeft()
     91         if solarSystemTimeLeft < 0:
     92             return GetByLabel('UI/Inventory/AssetSafety/DeliverBtnAvailableHint')
     93         else:
     94             formattedTimeLeft = FormatTimeIntervalShortWritten(solarSystemTimeLeft)
     95             return GetByLabel('UI/Inventory/AssetSafety/DeliverBtnNotAvailableNowHint', timeUntil=formattedTimeLeft)
     96 
     97     def UpdateProgress(self):
     98         solarSystemTimeLeft, autoDeliverTimeLeft = self.GetDeliveryTimesLeft()
     99         progress = 1 - solarSystemTimeLeft / (const.DAY * float(self.daysUntilCanDeliverConst))
    100         self.deliverBtn.SetProgress(progress)
    101         formattedTimeLeft = FormatTimeIntervalShortWritten(max(0, autoDeliverTimeLeft))
    102         self.autoTimeLeft.text = formattedTimeLeft
    103         self.SetDeliverBtnState(solarSystemTimeLeft)
    104 
    105     @staticmethod
    106     def GetNameAndSystem(safetyData):
    107         return [safetyData['wrapName'], cfg.evelocations.Get(safetyData['solarSystemID']).name]
    108 
    109     @staticmethod
    110     def GetColumnSortValues(safetyData):
    111         name, systemName = AssetSafetyEntry.GetNameAndSystem(safetyData)
    112         sortValues = [name.lower(),
    113          systemName.lower(),
    114          safetyData['ejectTime'],
    115          safetyData['ejectTime']]
    116         return sortValues
    117 
    118     @staticmethod
    119     def GetHeaders():
    120         headers = [GetByLabel('UI/Common/Name'),
    121          GetByLabel('UI/Common/LocationTypes/SolarSystem'),
    122          GetByLabel('UI/Inventory/AssetSafety/ManualDelivery'),
    123          GetByLabel('UI/Inventory/AssetSafety/AutoDelivery')]
    124         return headers
    125 
    126     @staticmethod
    127     def GetMinimumColWidth():
    128         textWidth, textHeight = LabelThemeColored.MeasureTextSize(GetByLabel('UI/Inventory/AssetSafety/DeliverTo'))
    129         return {GetByLabel('UI/Inventory/AssetSafety/ManualDelivery'): textWidth + 30}
    130 
    131     @staticmethod
    132     def GetDefaultColumnWidth():
    133         return {GetByLabel('UI/Inventory/AssetSafety/AutoDelivery'): 500}
    134 
    135 
    136 class DeliverButton(Button):
    137     default_name = 'deliverButton'
    138 
    139     def ApplyAttributes(self, attributes):
    140         Button.ApplyAttributes(self, attributes)
    141         self.progressFill = FillThemeColored(parent=self, name='progressFill', state=uiconst.UI_DISABLED, align=uiconst.TOLEFT_PROP, colorType=uiconst.COLORTYPE_UIHILIGHT, opacity=1.0)
    142 
    143     def SetProgress(self, progress):
    144         self.progressFill.width = min(1.0, max(0.0, progress))