achievement_score.py (4201B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\chip\achievement_score.py 2 import threadutils 3 from achievement_system.client.api.error import GenericInternalServerError, ServiceUnavailableError 4 from achievement_system.client.api.repository import get_repository 5 from achievement_system.client.api.signal import on_achievement_progressed, on_achievement_completed 6 from achievement_system.client.ui.window.window import AchievementsWindow 7 from carbon.common.script.util.format import FmtAmt 8 from carbonui import Align, uiconst 9 from carbonui.primitives.container import Container 10 from carbonui.primitives.containerAutoSize import ContainerAutoSize 11 from carbonui.primitives.fill import Fill 12 from carbonui.primitives.frame import Frame 13 from carbonui.text.styles import TextDetail 14 from carbonui.uianimations import animations 15 from character.client.identifier import CharacterIdentifier 16 from eve.client.script.ui import eveColor 17 from localization import GetByLabel 18 from signals import Signal 19 20 class AchievementScoreChip(ContainerAutoSize): 21 default_height = 18 22 default_opacity = 0.0 23 default_display = False 24 25 def __init__(self, character_id, animate = True, *args, **kwargs): 26 super(AchievementScoreChip, self).__init__(*args, **kwargs) 27 self.character_id = character_id 28 self.animate = animate 29 self.on_update = Signal('on_update') 30 self.construct_layout() 31 self.connect_signals() 32 self.update() 33 34 def Close(self): 35 try: 36 self.disconnect_signals() 37 finally: 38 super(AchievementScoreChip, self).Close() 39 40 def connect_signals(self): 41 on_achievement_completed.connect(self.on_achievement_completed) 42 on_achievement_progressed.connect(self.on_achievement_progressed) 43 44 def disconnect_signals(self): 45 on_achievement_completed.disconnect(self.on_achievement_completed) 46 on_achievement_progressed.disconnect(self.on_achievement_progressed) 47 48 def construct_layout(self): 49 self.content_container = Container(name='content_container', parent=self, align=Align.TOLEFT, clipChildren=True, width=0, height=self.default_height) 50 Fill(parent=self.content_container, color=eveColor.WHITE, opacity=0.15) 51 Frame(parent=self.content_container, frameConst=uiconst.FRAME_BORDER1_CORNER8, color=eveColor.WHITE, opacity=0.2) 52 self.label = TextDetail(name='label', parent=self.content_container, align=Align.CENTER) 53 54 @threadutils.highlander_threaded 55 def update(self): 56 self.display = False 57 try: 58 achievement_score = get_repository().get_achievement_score(CharacterIdentifier(self.character_id)) 59 except ServiceUnavailableError or GenericInternalServerError: 60 self.on_update() 61 return 62 63 if achievement_score == 0: 64 self.on_update() 65 return 66 self.display = True 67 label_text = FmtAmt(achievement_score) 68 text_width, _ = TextDetail.MeasureTextSize(label_text) 69 target_width = text_width + 8 70 self.label.text = label_text 71 self.content_container.state = uiconst.UI_NORMAL 72 self.content_container.hint = '%s %s' % (GetByLabel('UI/Achievements/Window/AchievementScore'), label_text) 73 self.content_container.OnClick = self.on_achievement_score_click 74 if self.animate: 75 animations.FadeIn(self, duration=0.25) 76 animations.MorphScalar(obj=self.content_container, attrName='width', startVal=self.content_container.width, endVal=target_width, duration=0.25) 77 else: 78 self.opacity = 1.0 79 self.content_container.width = target_width 80 self.on_update() 81 82 def on_achievement_score_click(self, *args): 83 wnd = AchievementsWindow.GetIfOpen() 84 if wnd and not wnd.destroyed: 85 wnd.Maximize() 86 else: 87 AchievementsWindow.Open() 88 89 def on_achievement_completed(self, achievement_id): 90 self.update() 91 92 def on_achievement_progressed(self, achievement_id, achievement_state): 93 self.update() 94 95 def OnGlobalFontSizeChanged(self): 96 self.update()