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

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)