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