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

character_title.py (3621B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\chip\character_title.py
      2 import threadutils
      3 from carbonui import Align, TextColor, uiconst
      4 from carbonui.primitives.container import Container
      5 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      6 from carbonui.primitives.fill import Fill
      7 from carbonui.primitives.frame import Frame
      8 from carbonui.text.styles import TextDetail
      9 from carbonui.uianimations import animations
     10 from character.client.identifier import CharacterIdentifier
     11 from cosmetics.client.character.title.api.error import DefinitionNotFoundError
     12 from cosmetics.client.character.title.api.repository import get_repository
     13 from cosmetics.client.character.title.api.signal import on_title_equipped_changed
     14 from eve.client.script.ui import eveColor
     15 from signals import Signal
     16 
     17 class CharacterTitleChip(ContainerAutoSize):
     18     default_height = 18
     19     default_opacity = 0.0
     20     default_display = False
     21 
     22     def __init__(self, character_id, animate = True, *args, **kwargs):
     23         super(CharacterTitleChip, self).__init__(*args, **kwargs)
     24         self.character_id = character_id
     25         self.animate = animate
     26         self.on_update = Signal('on_update')
     27         self._measured_width = 0
     28         self.construct_layout()
     29         self.connect_signals()
     30         self.update()
     31 
     32     def Close(self):
     33         try:
     34             self.disconnect_signals()
     35         finally:
     36             super(CharacterTitleChip, self).Close()
     37 
     38     def connect_signals(self):
     39         on_title_equipped_changed.connect(self.on_title_equipped_changed)
     40 
     41     def disconnect_signals(self):
     42         on_title_equipped_changed.disconnect(self.on_title_equipped_changed)
     43 
     44     def construct_layout(self):
     45         self.content_container = Container(name='content_container', parent=self, align=Align.TOLEFT, clipChildren=True, width=0, height=self.default_height)
     46         Fill(parent=self.content_container, color=eveColor.WHITE, opacity=0.15)
     47         Frame(parent=self.content_container, frameConst=uiconst.FRAME_BORDER1_CORNER8, color=eveColor.WHITE, opacity=0.2)
     48         self.label = TextDetail(name='label', parent=self.content_container, align=Align.CENTER, color=TextColor.HIGHLIGHT)
     49 
     50     @threadutils.highlander_threaded
     51     def update(self):
     52         self.display = False
     53         equipped_state = get_repository().get_equipped_title(CharacterIdentifier(self.character_id))
     54         if equipped_state is None or equipped_state.equipped_title is None:
     55             self.on_update()
     56             return
     57         try:
     58             title_attributes = get_repository().definitions.get_title(equipped_state.equipped_title)
     59         except DefinitionNotFoundError:
     60             self.on_update()
     61             return
     62 
     63         self.display = True
     64         label_text = title_attributes.localized_name
     65         text_width, _ = TextDetail.MeasureTextSize(label_text)
     66         target_width = text_width + 8
     67         self._measured_width = target_width
     68         self.label.text = label_text
     69         if self.animate:
     70             animations.FadeIn(self, duration=0.25)
     71             animations.MorphScalar(obj=self.content_container, attrName='width', startVal=self.content_container.width, endVal=target_width, duration=0.25)
     72         else:
     73             self.opacity = 1.0
     74             self.content_container.width = target_width
     75         self.on_update()
     76 
     77     @property
     78     def measured_width(self):
     79         return self._measured_width
     80 
     81     def on_title_equipped_changed(self, character_identifier, equipped_state):
     82         self.update()
     83 
     84     def OnGlobalFontSizeChanged(self):
     85         self.update()