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

characterInfoWindow.py (11619B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\info\characterInfoWindow.py
      2 import blue
      3 import localization
      4 import uthread
      5 from achievement_system.client.ui.chip.achievement_info import AchievementInfoChips
      6 from carbonui import uiconst, TextColor
      7 from carbonui.primitives.container import Container
      8 from carbonui.primitives.sprite import Sprite
      9 from carbonui.text.styles import TextHeader, TextBody, TextDetail
     10 from carbon.common.script.util.format import FmtDateTimeInterval
     11 from characterdata.bloodlines import get_bloodline_description
     12 from eve.client.script.ui.shared.info.infoContentBase import InfoWindowMonolith
     13 from .infoContentBase import InfoTypeEnum
     14 from eve.client.script.ui.station.agents.agentDialogueUtil import GetAgentNameAndLevel
     15 from eve.common.script.sys import idCheckers
     16 from eve.client.script.ui.station.agents.agentConversationIcon import AgentConversationIcon
     17 from menu import MenuLabel
     18 from .infoConst import *
     19 from eve.client.script.ui.control import eveIcon
     20 
     21 class CharacterInfoWindow(InfoWindowMonolith):
     22     __guid__ = 'form.characterinfowindow'
     23     default_name = 'characterInfoWindow'
     24     default_windowID = 'characterInfoWindow'
     25 
     26     def __init__(self):
     27         super(CharacterInfoWindow, self).__init__()
     28         self.captionText = None
     29         self.captionTextPadTop = 14
     30         self.info_type = InfoTypeEnum.Character
     31         self.char_icon = None
     32 
     33     def construct_window_header(self):
     34         self.construct_header_caption_and_sub_caption()
     35         self.construct_header_character()
     36 
     37     def construct_header_caption_and_sub_caption(self):
     38         if self.captionText:
     39             self.captionText = TextHeader(name='CharacterName', parent=self.captioncontainer, align=uiconst.TOTOP, state=uiconst.UI_NORMAL, text=self.captionText, color=TextColor.HIGHLIGHT)
     40             self.captioncontainer.height = 30
     41             self.captionText.padTop = self.captionTextPadTop
     42             if self.subCaptionText:
     43                 alpha = 0
     44                 lbl = TextDetail(name='subCaption', text=self.subCaptionText, parent=self.captioncontainer, align=uiconst.TOTOP, tabs=[84], state=uiconst.UI_DISABLED)
     45                 if alpha != 0:
     46                     lbl.SetAlpha(alpha)
     47 
     48     def construct_header_character(self):
     49         corp_id = None
     50         char_start_date = None
     51         alliance_id = None
     52         char_info = None
     53         corp_char_info = None
     54         security = None
     55         self.topRightContent.padLeft = 7
     56         if not idCheckers.IsNPC(self.item_id):
     57             parallelCalls = []
     58             parallelCalls.append((sm.RemoteSvc('charMgr').GetPublicInfo3, (self.item_id,)))
     59             parallelCalls.append((sm.GetService('corp').GetInfoWindowDataForChar, (self.item_id, 1)))
     60             parallelCalls.append((sm.GetService('crimewatchSvc').GetCharacterSecurityStatus, (self.item_id,)))
     61             char_info, corp_char_info, security = uthread.parallel(parallelCalls)
     62         if char_info is not None:
     63             char_info = char_info[0]
     64             self.data[TAB_BIO]['text'] = char_info.description
     65             char_start_date = char_info.startDateTime
     66             if getattr(char_info, 'medal1GraphicID', None):
     67                 eveIcon.Icon(icon='res:/ui/Texture/WindowIcons/corporationdecorations.png', parent=self.mainicon, left=70, top=80, size=64, align=uiconst.RELATIVE, idx=0)
     68         self.achievement_info_chips = AchievementInfoChips(name='achievement_info_chips', parent=self.captioncontainer, align=uiconst.TOTOP, character_id=self.item_id, padding=(0, 2, 0, 2))
     69         if corp_char_info:
     70             corp_id = corp_char_info.corpID
     71             alliance_id = corp_char_info.allianceID
     72             self.corpID = corp_id
     73             self.allianceID = alliance_id
     74             titleList = []
     75             if corp_char_info.title:
     76                 titleList.append(corp_char_info.title)
     77             for index in xrange(1, 17):
     78                 titleText = getattr(corp_char_info, 'title%s' % index, None)
     79                 if titleText:
     80                     titleList.append(titleText)
     81 
     82             if len(titleList):
     83                 loc_title = localization.formatters.FormatGenericList(titleList)
     84                 text = TextBody(parent=self.captioncontainer, align=uiconst.TOTOP)
     85                 text.text = localization.GetByLabel('UI/InfoWindow/CorpTitle', title=loc_title)
     86                 if text.height > 405:
     87                     text.height = 405
     88         if not idCheckers.IsNPC(self.item_id):
     89             loc_text = localization.GetByLabel('UI/InfoWindow/SecurityStatusOfCharacter', secStatus=security, text_color=TextColor.HIGHLIGHT.hex_argb)
     90             security_text = TextDetail(parent=self.therestcontainer, align=uiconst.TOTOP, color=TextColor.SECONDARY)
     91             security_text.text = loc_text
     92             standing = sm.GetService('standing').GetStanding(session.corpid, self.item_id)
     93             if standing is not None:
     94                 loc_standing = localization.GetByLabel('UI/InfoWindow/CorpStandingOfCharacter', corpStanding=standing, text_color=TextColor.HIGHLIGHT.hex_argb)
     95                 standing_text = TextDetail(parent=self.therestcontainer, align=uiconst.TOTOP, color=TextColor.SECONDARY)
     96                 standing_text.text = loc_standing
     97         if idCheckers.IsNPC(self.item_id):
     98             agentInfo = sm.GetService('agents').GetAgentByID(self.item_id)
     99             if agentInfo:
    100                 corp_id = agentInfo.corporationID
    101             else:
    102                 corp_id = sm.RemoteSvc('corpmgr').GetCorporationIDForCharacter(self.item_id)
    103         if corp_id:
    104             self.subinfolinkcontainer.height = 70
    105             if not idCheckers.IsNPC(corp_id):
    106                 self.CheckReconstructCorpBanner(corpID=corp_id, bannerParent=self.topParent, logoParent=self.subinfolinkcontainer, logoAlign=uiconst.TOLEFT, logoSize=(0, 0, 64, 64))
    107                 self.setup_logo_click_for_corp_info(self.corpBanner.corp_icon, corp_id)
    108                 self.corpBanner.corp_icon.padRight = 4
    109             else:
    110                 npcCorpLogo = eveIcon.GetLogoIcon(itemID=corp_id, parent=self.subinfolinkcontainer, state=uiconst.UI_NORMAL, hint=localization.GetByLabel('UI/InfoWindow/ClickForCorpInfo'), align=uiconst.TOLEFT, pos=(0, 0, 64, 64), ignoreSize=True)
    111                 self.setup_logo_click_for_corp_info(npcCorpLogo, corp_id)
    112                 npcCorpLogo.padRight = 4
    113             text_pad_left = 5
    114             loc_member_of = localization.GetByLabel('UI/InfoWindow/MemberOf')
    115             TextDetail(parent=self.subinfolinkcontainer, align=uiconst.TOTOP, padLeft=text_pad_left, color=TextColor.SECONDARY, text=loc_member_of)
    116             TextHeader(parent=self.subinfolinkcontainer, align=uiconst.TOTOP, padLeft=text_pad_left, padTop=4, color=TextColor.NORMAL, text=cfg.eveowners.Get(corp_id).name)
    117             if char_start_date is not None:
    118                 formatted_time = FmtDateTimeInterval(char_start_date, blue.os.GetWallclockTime(), 'day', highlightTime=True)
    119                 loc_membership_time = localization.GetByLabel('UI/InfoWindow/MemberFor', timePeriod=formatted_time)
    120                 TextDetail(parent=self.subinfolinkcontainer, align=uiconst.TOTOP, padLeft=text_pad_left, padTop=4, color=TextColor.SECONDARY, text=loc_membership_time)
    121             uthread.new(self.ShowRelationshipIcon, self.item_id, corp_id, alliance_id)
    122             if char_info is not None:
    123                 militiaFactionID = char_info.militiaFactionID
    124                 if not idCheckers.IsNPC(self.item_id) and (alliance_id or militiaFactionID):
    125                     if militiaFactionID:
    126                         fwSubinfoCont = Container(name='fwSubinfoCont', parent=self.therestcontainer, align=uiconst.TOTOP, height=16, idx=0, clipChildren=True)
    127                         fwiconCont = Container(name='subinfo', parent=fwSubinfoCont, align=uiconst.TOLEFT, width=20)
    128                         fwicon = Sprite(name='fwIcon', parent=fwiconCont, align=uiconst.TOPLEFT, texturePath='res:/UI/Texture/Icons/FW_Icon_Small.png', pos=(-2, 0, 20, 20))
    129                         fwicon.OnClick = sm.GetService('cmd').OpenMilitia
    130                         loc_faction = localization.GetByLabel('UI/FactionWarfare/MilitiaAndFaction', factionName=cfg.eveowners.Get(militiaFactionID).name)
    131                         faction_text = TextDetail(parent=fwSubinfoCont, align=uiconst.TOLEFT, color=TextColor.SECONDARY, text=loc_faction)
    132                         fwSubinfoCont.height = max(faction_text.textheight + 2 * faction_text.top, fwicon.height)
    133                     if alliance_id:
    134                         allianceSubinfoCont = Container(name='allianceSubinfoCont', parent=self.therestcontainer, align=uiconst.TOTOP, height=16, idx=0, clipChildren=True)
    135                         text = cfg.eveowners.Get(alliance_id).name
    136                         alliance_text = TextDetail(parent=allianceSubinfoCont, align=uiconst.TOLEFT, color=TextColor.SECONDARY, text=text)
    137                         allianceSubinfoCont.height = alliance_text.textheight + 2 * alliance_text.top
    138                 self.therestcontainer.padBottom = 20
    139         if sm.GetService('agents').IsAgent(self.item_id):
    140             AgentConversationIcon(parent=self.subinfolinkcontainer, align=uiconst.TOPRIGHT, agentID=self.item_id)
    141 
    142     def update_window_icon(self, type_id, item_id):
    143         self.reset_window_icon()
    144         iWidth = 130
    145         iHeight = 130
    146         self.cloneStateOverlay = None
    147         self.char_icon = Sprite(parent=self.mainicon, align=uiconst.CENTER, state=uiconst.UI_DISABLED, width=iHeight, height=iHeight)
    148         sm.GetService('photo').GetPortrait(item_id, 256, self.char_icon, allowServerTrip=True)
    149         self.mainiconparent.cursor = uiconst.UICURSOR_MAGNIFIER
    150         self.mainiconparent.OnClick = (self.OpenPortraitWnd, item_id)
    151         self.mainiconparent.width = self.mainicon.width = iWidth
    152         self.mainiconparent.height = self.mainicon.height = iHeight
    153         self.mainiconparent.padLeft = 15
    154         self.mainiconparent.clipChildren = True
    155 
    156     def scale_window_icon(self):
    157         if self.char_icon is None:
    158             return
    159         size = max(130, self.captioncontainer.height + self.subinfolinkcontainer.height + self.therestcontainer.height)
    160         self.char_icon.width = size
    161         self.char_icon.height = size
    162 
    163     def update_description_caption_and_sub_caption(self):
    164         capt, desc, subCapt = self.get_description_caption_and_sub_caption()
    165         if sm.GetService('agents').IsAgent(self.item_id):
    166             agent = sm.GetService('agents').GetAgentByID(self.item_id)
    167             level = agent.level
    168             bloodlineID = agent.bloodlineID
    169             capt = GetAgentNameAndLevel(self.item_id, level)
    170             desc = get_bloodline_description(bloodlineID)
    171         else:
    172             info = sm.RemoteSvc('charMgr').GetPublicInfo3(self.item_id)
    173             if info:
    174                 bloodlineID = info[0].bloodlineID
    175                 capt = cfg.eveowners.Get(self.item_id).name
    176                 desc = get_bloodline_description(bloodlineID)
    177         self.apply_description_caption_and_sub_caption(desc, capt, subCapt)
    178 
    179     def get_action_menu(self, item_id, type_id, inv_item):
    180         m = super(CharacterInfoWindow, self).get_action_menu(item_id, type_id, inv_item)
    181         if not idCheckers.IsNPC(item_id):
    182             m.append((MenuLabel('UI/InfoWindow/ShowContracts'), self.ShowContracts, (item_id,)))
    183             if not int(sm.GetService('machoNet').GetGlobalConfig().get('hideReportBot', 0)):
    184                 m.append((MenuLabel('UI/InfoWindow/ReportBot'), self.ReportBot, (item_id,)))
    185         return m