pin_button.py (2918B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\card\components\pin_button.py 2 import eveicon 3 import threadutils 4 from achievement_system.client.api.signal import on_achievement_pinned, on_achievement_unpinned, on_achievement_completed 5 from carbonui import ButtonFrameType, ButtonVariant, Density 6 from carbonui.control.button import Button 7 from localization import GetByLabel 8 9 class PinButton(Button): 10 default_texturePath = eveicon.pinned 11 default_density = Density.EXPANDED 12 default_variant = ButtonVariant.PRIMARY 13 default_frame_type = ButtonFrameType.CUT_BOTTOM_LEFT_RIGHT 14 15 def __init__(self, controller, *args, **kwargs): 16 super(PinButton, self).__init__(*args, **kwargs) 17 self.controller = controller 18 self.func = self._on_click 19 self.update() 20 self.connect_signals() 21 22 def Close(self): 23 try: 24 self.disconnect_signals() 25 finally: 26 super(PinButton, self).Close() 27 28 def connect_signals(self): 29 on_achievement_pinned.connect(self.on_achievement_pinned) 30 on_achievement_unpinned.connect(self.on_achievement_unpinned) 31 on_achievement_completed.connect(self.on_achievement_completed) 32 33 def disconnect_signals(self): 34 on_achievement_pinned.disconnect(self.on_achievement_pinned) 35 on_achievement_unpinned.disconnect(self.on_achievement_unpinned) 36 on_achievement_completed.disconnect(self.on_achievement_completed) 37 38 @threadutils.highlander_threaded 39 def update(self, animate = True): 40 if not self.controller.is_pinned and (self.controller.is_completed or self.controller.is_historic): 41 self.disable(animate) 42 self.label = GetByLabel('UI/Achievements/Window/Card/PinButtonLabel') 43 self.hint = GetByLabel('UI/Achievements/Window/Card/PinButtonHint') 44 return 45 if self.controller.is_pinned: 46 self.label = GetByLabel('UI/Achievements/Window/Card/UnpinButtonLabel') 47 self.hint = GetByLabel('UI/Achievements/Window/Card/UnpinButtonHint') 48 else: 49 self.label = GetByLabel('UI/Achievements/Window/Card/PinButtonLabel') 50 self.hint = GetByLabel('UI/Achievements/Window/Card/PinButtonHint') 51 52 def on_achievement_pinned(self, achievement_id): 53 if achievement_id == self.controller.achievement_entry.identifier: 54 self.update() 55 56 def on_achievement_unpinned(self, achievement_id): 57 if achievement_id == self.controller.achievement_entry.identifier: 58 self.update() 59 60 def on_achievement_completed(self, achievement_id): 61 if achievement_id == self.controller.achievement_entry.identifier: 62 self.update() 63 64 def _on_click(self, *args): 65 self.controller.toggle_pinned() 66 67 68 class CompactPinButton(PinButton): 69 default_density = Density.COMPACT