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