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

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