corporationInfoWindow.py (14014B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\info\corporationInfoWindow.py 2 import blue 3 import log 4 import eveicon 5 import localization 6 import uthread 7 from carbonui import uiconst, TextColor, PickState 8 from carbon.common.script.util.linkUtil import GetShowInfoLink 9 from carbonui.primitives.container import Container 10 from carbonui.primitives.sprite import Sprite 11 from carbonui.text.styles import TextHeader, TextBody, TextDetail 12 from carbonui.uianimations import animations 13 from eve.client.script.ui.shared.info.infoContentBase import InfoWindowMonolith 14 from menu import MenuLabel 15 from .infoContentBase import InfoTypeEnum 16 from eve.common.script.sys import idCheckers 17 from eve.common.script.sys.idCheckers import IsNPCCorporation 18 from npcs.npccorporations import get_corporation_faction_id, get_npc_corporation_description, get_npc_corporation 19 from .infoConst import * 20 from eve.client.script.ui.control import eveIcon 21 CEO_CONT_WIDTH = 200 22 CEO_CONT_MIN_WIDTH = 90 23 LOGO_CONT_SIZE = 96 24 LOGO_SIZE = 54 25 LOGO_PADDING = (LOGO_CONT_SIZE - LOGO_SIZE) / 2 26 PICTURE_TEXT_OFFSET = 16 27 28 class CorporationInfoWindow(InfoWindowMonolith): 29 __guid__ = 'form.corporationinfowindow' 30 default_name = 'corportationInfoWindow' 31 default_windowID = 'corporationInfoWindow' 32 33 def __init__(self): 34 super(CorporationInfoWindow, self).__init__() 35 self.captionText = None 36 self.info_type = InfoTypeEnum.Corporation 37 self.corp_info = None 38 self.ceo_name = None 39 self.ceo_name_container = None 40 self.ceo_fade_out = False 41 self.wnd_full_size = 0 42 43 def construct_layout_optional(self): 44 self.ceo_container = Container(name='ceocontainer', parent=self.toparea, align=uiconst.TORIGHT, state=uiconst.UI_PICKCHILDREN, width=CEO_CONT_WIDTH, display=False) 45 46 def reconstruct_info_window(self, type_id, item_id = None, rec = None, parent_id = None, abstract_info = None, select_tab_type = None, params = None): 47 self.corp_info = sm.RemoteSvc('corpmgr').GetPublicInfo(item_id) 48 return super(CorporationInfoWindow, self).reconstruct_info_window(type_id, item_id, rec, parent_id, abstract_info, select_tab_type, params) 49 50 def construct_window_header(self): 51 self.construct_header_caption_and_sub_caption() 52 self.construct_header() 53 self.construct_ceo_picture_info() 54 self.on_resize(no_anim=True) 55 56 def construct_ceo_picture_info(self): 57 self.ceo_container.Flush() 58 if IsNPCCorporation(self.corp_info.corporationID): 59 self.ceo_container.display = False 60 return 61 self.ceo_container.display = True 62 ceo_sprite = Sprite(parent=self.ceo_container, align=uiconst.CENTERRIGHT, state=uiconst.UI_DISABLED, pos=(LOGO_PADDING, 63 0, 64 LOGO_SIZE, 65 LOGO_SIZE), textureSecondaryPath='res:/UI/Texture/circle_with_border_blurred.png', spriteEffect=uiconst.SpriteEffect.MODULATE) 66 sm.GetService('photo').GetPortrait(self.corp_info.ceoID, 256, ceo_sprite, allowServerTrip=True) 67 backing_extra_size = 10 68 backing_padding = LOGO_PADDING - backing_extra_size / 2 69 Sprite(parent=self.ceo_container, align=uiconst.CENTERRIGHT, state=uiconst.UI_DISABLED, pos=(backing_padding, 70 0, 71 LOGO_SIZE + backing_extra_size, 72 LOGO_SIZE + backing_extra_size), texturePath='res:/UI/Texture/circle_full_transparent.png') 73 vertical_text_padding = 20 74 horizontal_text_padding = LOGO_PADDING + LOGO_SIZE + PICTURE_TEXT_OFFSET 75 TextBody(parent=self.ceo_container, align=uiconst.CENTERRIGHT, color=TextColor.SECONDARY, padding=(0, 76 0, 77 horizontal_text_padding, 78 vertical_text_padding), text=localization.GetByLabel('UI/Corporations/Common/CEO')) 79 ceo_id = self.corp_info.ceoID 80 self.ceo_name_container = Container(name='ceonamecontainer', parent=self.ceo_container, align=uiconst.TOLEFT, clipChildren=True, width=CEO_CONT_WIDTH - horizontal_text_padding) 81 self.ceo_name = TextHeader(parent=self.ceo_name_container, align=uiconst.CENTERRIGHT, color=TextColor.HIGHLIGHT, padding=(0, 82 0, 83 0, 84 -vertical_text_padding), text=cfg.eveowners.Get(ceo_id).name, autoFadeSides=16) 85 text_width_diff = self.ceo_name.textwidth - self.ceo_name_container.width 86 if text_width_diff > 0: 87 self.ceo_name.padRight = -text_width_diff 88 89 def construct_header_caption_and_sub_caption(self): 90 if self.captionText: 91 self.captionText = TextHeader(name='CorporationName', parent=self.captioncontainer, align=uiconst.TOLEFT, state=uiconst.UI_NORMAL, text=self.captionText, color=TextColor.HIGHLIGHT, autoFadeSides=16, maxLines=1) 92 self.wnd_full_size = self.captionText.textwidth + CEO_CONT_WIDTH + LOGO_SIZE + LOGO_PADDING * 2 93 self.captioncontainer.height = 30 94 self.captioncontainer.padTop = 22 95 if self.subCaptionText: 96 alpha = 0 97 lbl = TextDetail(name='subCaption', text=self.subCaptionText, parent=self.captioncontainer, align=uiconst.TOTOP, tabs=[84], state=uiconst.UI_DISABLED, autoFadeSides=16, maxLines=1) 98 if alpha != 0: 99 lbl.SetAlpha(alpha) 100 101 def construct_header(self): 102 parallelCalls = [] 103 parallelCalls.append((get_corporation_faction_id, (self.item_id,))) 104 if self.warfactioninfo is None: 105 parallelCalls.append((sm.GetService('facwar').GetCorporationWarFactionID, (self.item_id,))) 106 else: 107 parallelCalls.append((lambda : None, ())) 108 factionID, warFaction = uthread.parallel(parallelCalls) 109 self.warFactionID = warFaction 110 if IsNPCCorporation(self.corp_info.corporationID): 111 self.subinfolinkcontainer.height = 64 112 else: 113 self.subinfolinkcontainer.height = 16 114 allianceid = self.corp_info.allianceID 115 uthread.new(self.ShowRelationshipIcon, None, self.item_id, allianceid) 116 self.captioncontainer.padRight = 30 117 hqID, hqTypeID = self.get_corporation_headquarters() 118 if hqID: 119 self.subinfolinkcontainer.padTop = 0 120 self.subinfolinkcontainer.padRight = 30 121 hqLink = GetShowInfoLink(hqTypeID, cfg.evelocations.Get(hqID).name, hqID) 122 if IsNPCCorporation(self.corp_info.corporationID): 123 hqText = TextBody(text=localization.GetByLabel('UI/InfoWindow/HeadquartersLocation', hqLink=hqLink), parent=self.captioncontainer, align=uiconst.TOTOP, state=uiconst.UI_NORMAL, maxLines=1) 124 else: 125 Sprite(parent=self.subinfolinkcontainer, align=uiconst.TOPLEFT, pickState=PickState.OFF, pos=(0, 0, 16, 16), texturePath=eveicon.house, color=TextColor.SECONDARY) 126 hqText = TextBody(text=hqLink, parent=self.subinfolinkcontainer, align=uiconst.TOLEFT, state=uiconst.UI_NORMAL, padLeft=26, autoFadeSides=16, maxLines=1) 127 min_width = hqText.textwidth + CEO_CONT_WIDTH + LOGO_CONT_SIZE + PICTURE_TEXT_OFFSET * 2 + 40 128 if min_width > self.wnd_full_size: 129 self.wnd_full_size = min_width 130 memberDisp = None 131 info_svc = sm.GetService('info') 132 if factionID or warFaction: 133 faction = cfg.eveowners.Get(factionID) if factionID else cfg.eveowners.Get(warFaction) 134 eveIcon.GetLogoIcon(itemID=faction.ownerID, parent=self.subinfolinkcontainer, align=uiconst.TOLEFT, state=uiconst.UI_NORMAL, hint=localization.GetByLabel('UI/InfoWindow/ClickForFactionInfo'), OnClick=(info_svc.ShowInfo, faction.typeID, faction.ownerID), size=64, ignoreSize=True) 135 memberDisp = cfg.eveowners.Get(faction.ownerID).name 136 if allianceid: 137 self.subinfolinkcontainer.height += 48 138 alliance = cfg.eveowners.Get(allianceid) 139 eveIcon.GetLogoIcon(name='AllianceIcon', itemID=allianceid, align=uiconst.BOTTOMLEFT, parent=self.subinfolinkcontainer, OnClick=(info_svc.ShowInfo, alliance.typeID, allianceid), hint=localization.GetByLabel('UI/InfoWindow/ClickForAllianceInfo'), state=uiconst.UI_NORMAL, size=48, ignoreSize=True, top=-5) 140 memberDisp = cfg.eveowners.Get(allianceid).name 141 if memberDisp is not None: 142 if IsNPCCorporation(self.corp_info.corporationID): 143 padLeft, padBottom = (68, 20) 144 else: 145 padLeft, padBottom = (58, 11) 146 TextBody(text=localization.GetByLabel('UI/InfoWindow/MemberOfAlliance', allianceName=memberDisp), parent=self.subinfolinkcontainer, align=uiconst.BOTTOMLEFT, padLeft=padLeft, padBottom=padBottom) 147 if warFaction is not None: 148 facWarInfoCont = Container(name='facwarinfo', parent=self.subinfolinkcontainer, align=uiconst.TOTOP, height=28) 149 fwicon = Sprite(name='fwIcon', parent=facWarInfoCont, align=uiconst.CENTERLEFT, texturePath='res:/UI/Texture/Icons/FW_Icon_Large.png', pos=(2, 0, 32, 32), hint=localization.GetByLabel('UI/Commands/OpenFactionalWarfare')) 150 fwicon.OnClick = sm.GetService('cmd').OpenMilitia 151 TextBody(text=localization.GetByLabel('UI/FactionWarfare/MilitiaAndFaction', factionName=cfg.eveowners.Get(warFaction).name), parent=facWarInfoCont, align=uiconst.CENTERLEFT, left=38) 152 153 def update_window_icon(self, type_id, item_id): 154 self.reset_window_icon() 155 iWidth = iHeight = LOGO_CONT_SIZE 156 self.cloneStateOverlay = None 157 try: 158 cfg.eveowners.Get(item_id) 159 except: 160 log.LogWarn('Tried to show info on bad corpID:', item_id) 161 raise BadArgs('InfoNoCorpWithID') 162 163 if IsNPCCorporation(item_id): 164 eveIcon.GetLogoIcon(itemID=item_id, parent=self.mainicon, name='corplogo', acceptNone=False, align=uiconst.TOALL, state=uiconst.UI_DISABLED, size=128) 165 else: 166 self.CheckReconstructCorpBanner(item_id, self.topParent, self.mainicon, uiconst.CENTER, (0, 167 0, 168 LOGO_SIZE, 169 LOGO_SIZE)) 170 self.mainiconparent.cursor = uiconst.UICURSOR_MAGNIFIER 171 self.mainiconparent.OnClick = (self.OpenEntityWnd, item_id) 172 self.mainiconparent.width = self.mainicon.width = iWidth 173 self.mainiconparent.height = self.mainicon.height = iHeight 174 175 def update_description_caption_and_sub_caption(self): 176 capt, desc, subCapt = self.get_description_caption_and_sub_caption() 177 if self.item_id is not None: 178 if self.corp_info is None: 179 self.corp_info = sm.RemoteSvc('corpmgr').GetPublicInfo(self.item_id) 180 self.corp_info.shares = sm.GetService('corp').GetCorporation(self.item_id).shares 181 if IsNPCCorporation(self.corp_info.corporationID): 182 desc = get_npc_corporation_description(self.corp_info.corporationID) 183 else: 184 desc = self.corp_info.description 185 if eveIcon.CheckCorpID(self.item_id): 186 capt = '' 187 else: 188 capt = cfg.eveowners.Get(self.item_id).name 189 if self.corp_info.deleted: 190 capt = localization.GetByLabel('UI/InfoWindow/ClosedCorpOrAllianceCaption', corpOrAllianceName=cfg.eveowners.Get(self.item_id).name) 191 self.apply_description_caption_and_sub_caption(desc, capt, subCapt) 192 193 def get_corporation_headquarters(self): 194 hq_id = None 195 hq_type_id = None 196 if idCheckers.IsNPCCorporation(self.corp_info.corporationID): 197 corporation = get_npc_corporation(self.corp_info.corporationID) 198 station_hq = getattr(corporation, 'stationID') 199 solar_system_hq = getattr(corporation, 'solarSystemID') 200 if station_hq: 201 station_info = sm.GetService('ui').GetStationStaticInfo(station_hq) 202 hq_id = station_hq 203 hq_type_id = station_info.stationTypeID 204 elif solar_system_hq: 205 hq_id = corporation.solarSystemID 206 hq_type_id = const.typeSolarSystem 207 else: 208 station_info = sm.GetService('ui').GetStationStaticInfo(self.corp_info.stationID) 209 if station_info: 210 hq_id = self.corp_info.stationID 211 hq_type_id = station_info.stationTypeID 212 return (hq_id, hq_type_id) 213 214 def get_action_menu(self, item_id, type_id, inv_item): 215 m = super(CorporationInfoWindow, self).get_action_menu(item_id, type_id, inv_item) 216 if not idCheckers.IsNPC(item_id): 217 m.append((MenuLabel('UI/InfoWindow/ShowContracts'), self.ShowContracts, (item_id,))) 218 return m 219 220 def on_resize(self, no_anim = False, *args): 221 if not self.ceo_name_container: 222 return 223 reduce_ceo_size = self.topParent.displayWidth < self.wnd_full_size 224 if reduce_ceo_size: 225 diff = self.wnd_full_size - self.topParent.displayWidth 226 new_ceo_width = max(CEO_CONT_WIDTH - diff, 0) 227 hide_ceo_ui = new_ceo_width < CEO_CONT_MIN_WIDTH 228 if hide_ceo_ui and not self.ceo_fade_out: 229 self.ceo_fade_out = True 230 if no_anim: 231 self.ceo_container.opacity = 0 232 else: 233 animations.FadeOut(self.ceo_container, duration=0.1, curveType=uiconst.ANIM_LINEAR) 234 self.ceo_container.width = new_ceo_width 235 return 236 if not hide_ceo_ui and self.ceo_fade_out: 237 self.ceo_fade_out = False 238 if no_anim: 239 self.ceo_container.opacity = 1 240 else: 241 animations.FadeIn(self.ceo_container, duration=0.1, curveType=uiconst.ANIM_LINEAR) 242 self.ceo_container.width = new_ceo_width 243 self.ceo_name_container.width = new_ceo_width - (LOGO_PADDING + LOGO_SIZE + PICTURE_TEXT_OFFSET) 244 text_width_diff = self.ceo_name.textwidth - self.ceo_name_container.width 245 self.ceo_name.padRight = min(-text_width_diff, 0)