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()