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

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