kill_mail.py (10579B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\entries\kill_mail.py 2 import blue 3 import evetypes 4 import localization 5 from carbon.common.script.util.format import FormatTimeAgo 6 from carbonui import uiconst 7 from carbonui.control.scrollentries import SE_BaseClassCore 8 from carbonui.primitives.container import Container 9 from carbonui.primitives.frame import Frame 10 from carbonui.primitives.sprite import Sprite 11 from eve.client.script.ui.control.entries.generic import Generic 12 from eve.client.script.ui.control.eveIcon import Icon 13 from eve.client.script.ui.control.eveLabel import EveLabelSmall 14 from eve.client.script.ui.shared import killReportUtil 15 from eve.client.script.ui.util import uix 16 from eve.common.lib import appConst as const 17 from eve.common.script.util.esiUtils import CopyESIKillmailUrlToClipboard 18 from eve.common.script.util.eveCommonUtils import CombatLog_CopyText 19 from menu import MenuLabel 20 21 class KillMail(SE_BaseClassCore): 22 __guid__ = 'listentry.KillMail' 23 __params__ = ['mail'] 24 __nonpersistvars__ = ['selection', 'id'] 25 ACTION_ICON_SIZE = 16 26 isDragObject = True 27 28 def Startup(self, *args): 29 sub = Container(name='sub', parent=self, pos=(0, 0, 0, 0)) 30 self.sr.leftbox = Container(parent=sub, align=uiconst.TOLEFT, width=42, height=42, padding=(0, 2, 4, 2)) 31 self.sr.middlebox = Container(parent=sub, align=uiconst.TOALL, padding=(0, 2, 0, 0)) 32 self.sr.techIcon = Sprite(name='techIcon', parent=self.sr.leftbox, left=1, width=16, height=16, idx=0) 33 self.sr.icon = Icon(parent=self.sr.leftbox, align=uiconst.TOALL, state=uiconst.UI_DISABLED) 34 Frame(parent=self.sr.leftbox, color=(0.4, 0.4, 0.4, 0.5)) 35 36 def Load(self, node): 37 self.sr.node = node 38 self.FillTextAndIcons() 39 40 def UpdateAlignment(self, *args, **kwargs): 41 alignment = super(KillMail, self).UpdateAlignment(*args, **kwargs) 42 self.UpdateLabelRightFade() 43 return alignment 44 45 def UpdateLabelRightFade(self): 46 availableWidth = self.sr.middlebox.displayWidth - const.defaultPadding - self.ACTION_ICON_SIZE 47 for label in self.sr.middlebox.children: 48 label.SetRightAlphaFade(fadeEnd=availableWidth, maxFadeWidth=20) 49 50 def FillTextAndIcons(self): 51 kill = self.sr.node.mail 52 if self.height == 64: 53 expanded = 1 54 else: 55 expanded = 0 56 topLine = 14 57 if session.charid == kill.victimCharacterID or session.corpid == kill.victimCorporationID: 58 text = localization.GetByLabel('UI/Control/Entries/KillMailShipAndTime', shipTypeID=kill.victimShipTypeID, killTime=max(blue.os.GetWallclockTime() - kill.killTime, 0)) 59 self.AddOrSetTextLine(text, configName='killMailsShipAndTimeLabel') 60 text = '' 61 if kill.victimShipTypeID is not None: 62 self.sr.icon.LoadIconByTypeID(kill.victimShipTypeID, ignoreSize=True) 63 techSprite = uix.GetTechLevelIcon(self.sr.techIcon, 1, kill.victimShipTypeID) 64 text = self._GetCorpAndOrAllianceText(kill.finalCorporationID, kill.finalAllianceID) 65 self.AddOrSetTextLine(text, configName='killerCorpOrAllianceLabel', top=topLine) 66 text = '' 67 if kill.finalShipTypeID is not None and kill.finalWeaponTypeID is not None: 68 text = localization.GetByLabel('UI/Control/Entries/KillMailShipAndWeapon', shipTypeID=kill.finalShipTypeID, weaponTypeID=kill.finalWeaponTypeID) 69 elif kill.finalShipTypeID is not None: 70 text = evetypes.GetName(kill.finalShipTypeID) 71 elif kill.finalWeaponTypeID is not None: 72 text = evetypes.GetName(kill.finalWeaponTypeID) 73 self.AddOrSetTextLine(text, configName='killerShipOrWeaponLabel', top=topLine * 2) 74 elif session.charid == kill.finalCharacterID or session.corpid == kill.finalCorporationID: 75 if kill.victimCharacterID is not None or kill.victimCorporationID is not None: 76 if kill.victimCharacterID is not None: 77 text = localization.GetByLabel('UI/Control/Entries/KillMailCharacterAndTime', characterID=kill.victimCharacterID, killTime=max(blue.os.GetWallclockTime() - kill.killTime, 0)) 78 else: 79 text = FormatTimeAgo(kill.killTime) 80 self.AddOrSetTextLine(text, configName='victimNameOrTimeLabel') 81 text = '' 82 text = self._GetCorpAndOrAllianceText(kill.victimCorporationID, kill.victimAllianceID) 83 self.AddOrSetTextLine(text, configName='victimCorpOrAllianceLabel', top=topLine) 84 text = '' 85 if kill.victimShipTypeID and kill.solarSystemID: 86 mapSvc = sm.GetService('map') 87 regionID = mapSvc.GetParent(mapSvc.GetParent(kill.solarSystemID)) 88 text = localization.GetByLabel('UI/Control/Entries/KillMailShipAndSolarSystem', shipTypeID=kill.victimShipTypeID, solarSystemID=kill.solarSystemID, regionID=regionID, security=sm.GetService('map').GetSecurityStatus(kill.solarSystemID)) 89 elif kill.victimShipTypeID: 90 text = evetypes.GetName(kill.victimShipTypeID) 91 elif kill.solarSystemID: 92 mapSvc = sm.GetService('map') 93 regionID = mapSvc.GetParent(mapSvc.GetParent(kill.solarSystemID)) 94 text = localization.GetByLabel('UI/Control/Entries/KillMailSolarSystem', solarSystemID=kill.solarSystemID, regionID=regionID, security=sm.GetService('map').GetSecurityStatus(kill.solarSystemID)) 95 self.AddOrSetTextLine(text, configName='shipNameAndSolarSystemLabel', top=topLine * 2) 96 else: 97 self.AddOrSetTextLine(localization.GetByLabel('UI/Control/Entries/KillMailUnknown'), configName='unknownLabel') 98 if kill.victimShipTypeID is not None: 99 self.sr.icon.LoadIconByTypeID(kill.victimShipTypeID, ignoreSize=True) 100 techSprite = uix.GetTechLevelIcon(self.sr.techIcon, 1, kill.victimShipTypeID) 101 else: 102 text = localization.GetByLabel('UI/Control/Entries/KillMailError') 103 self.sr.icon.LoadIcon('res:/ui/Texture/WindowIcons/personalstandings.png', ignoreSize=True) 104 self.sr.techIcon.display = False 105 self.sr.copyicon.state = uiconst.UI_HIDDEN 106 self.sr.linkicon.state = uiconst.UI_HIDDEN 107 self.GetMenu = None 108 109 def _GetCorpAndOrAllianceText(self, corpID, allianceID): 110 corpName = None 111 corpTicker = '' 112 allianceName = None 113 allianceTicker = '' 114 text = None 115 if corpID is not None: 116 corpName = cfg.eveowners.Get(corpID).name 117 try: 118 corpTicker = cfg.corptickernames.Get(corpID).tickerName 119 except KeyError as e: 120 pass 121 122 if allianceID is not None: 123 allianceName = cfg.eveowners.Get(allianceID).name 124 try: 125 allianceTicker = cfg.allianceshortnames.Get(allianceID).shortName 126 except KeyError as e: 127 pass 128 129 if corpName and allianceName: 130 text = localization.GetByLabel('UI/Control/Entries/KillMailCorpAndAlliance', corpName=corpName, corpTicker=corpTicker, allianceName=allianceName, allianceTicker=allianceTicker) 131 elif corpName: 132 text = localization.GetByLabel('UI/Control/Entries/KillMailCorpOrAlliance', name=corpName, ticker=corpTicker) 133 elif allianceName: 134 text = localization.GetByLabel('UI/Control/Entries/KillMailCorpOrAlliance', name=allianceName, ticker=allianceTicker) 135 return text 136 137 def AddOrSetTextLine(self, text, configName = '', top = 0): 138 if text: 139 label = getattr(self, configName, None) 140 if label is not None: 141 label.text = text 142 else: 143 label = EveLabelSmall(text=text, parent=self.sr.middlebox, align=uiconst.TOPLEFT, top=top) 144 if configName: 145 setattr(self, configName, label) 146 147 def GetMenu(self): 148 m = [] 149 if self.sr.node.GetMenu: 150 m = self.sr.node.GetMenu() 151 return m + [(MenuLabel('UI/Commands/ShowInfo'), self.RedirectToInfo, (1,)), 152 None, 153 (MenuLabel('UI/Control/Entries/CopyKillInformation'), self.GetCombatText, (1,)), 154 (MenuLabel('UI/Control/Entries/CopyExternalKillLink'), CopyESIKillmailUrlToClipboard, (self.sr.node.mail,))] 155 156 def RedirectToInfo(self, *args): 157 kill = self.sr.node.mail 158 if kill.victimCharacterID == session.charid: 159 baddieGuyID = None 160 if kill.finalCharacterID is None: 161 baddieGuyID = kill.finalCorporationID 162 else: 163 baddieGuyID = kill.finalCharacterID 164 char = cfg.eveowners.Get(baddieGuyID) 165 sm.StartService('info').ShowInfo(char.typeID, baddieGuyID) 166 elif kill.victimCharacterID is not None: 167 char = cfg.eveowners.Get(kill.victimCharacterID) 168 sm.StartService('info').ShowInfo(char.typeID, kill.victimCharacterID) 169 elif kill.victimCorporationID is not None: 170 sm.StartService('info').ShowInfo(const.typeCorporation, kill.victimCorporationID) 171 elif kill.allianceID is not None: 172 sm.StartService('info').ShowInfo(const.typeAlliance, kill.victimAllianceID) 173 174 def GetCombatText(self, isCopy = 0, *args): 175 mail = self.sr.node.mail 176 ret = CombatLog_CopyText(mail) 177 if isCopy: 178 blue.pyos.SetClipboardData(killReportUtil.CleanKillMail(ret)) 179 else: 180 return ret 181 182 def CopyCombatText(self): 183 text = self.GetCombatText() 184 blue.pyos.SetClipboardData(killReportUtil.CleanKillMail(text)) 185 186 def _OnClose(self): 187 self.timer = None 188 SE_BaseClassCore.Close(self) 189 190 def GetHeight(self, *args): 191 node, width = args 192 node.height = 46 193 return node.height 194 195 def OnDblClick(self, *args): 196 mail = self.sr.node.mail 197 kill = mail 198 if kill is not None: 199 from eve.client.script.ui.shared.killReportUtil import OpenKillReport 200 OpenKillReport(kill) 201 202 def GetDragData(self, *args): 203 nodes = [self.sr.node] 204 return nodes 205 206 207 class KillMailCondensed(Generic): 208 __guid__ = 'listentry.KillMailCondensed' 209 isDragObject = True 210 211 def GetDragData(self, *args): 212 nodes = [self.sr.node] 213 return nodes