pinned_page.py (4673B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\page\pinned\pinned_page.py 2 from achievement_system.client.api.repository import get_repository 3 from achievement_system.client.api.signal import on_achievement_pinned, on_achievement_unpinned, on_achievements_pinned_changed 4 from achievement_system.client.model.definition.achievement.entry import AchievementDefinitionEntry 5 from achievement_system.client.ui.controller.achievement_entry import AchievementEntryController 6 from achievement_system.client.ui.window.card.compact_card import CompactAchievementCard 7 from achievement_system.client.ui.window.const import WindowState, TRANSITION_DURATION 8 from achievement_system.client.ui.window.signal import on_window_state_changed 9 from carbonui import Align, TextAlign, TextColor, uiconst 10 from carbonui.control.scrollContainer import ScrollContainer 11 from carbonui.primitives.container import Container 12 from carbonui.primitives.flowcontainer import FlowContainer 13 from carbonui.text.styles import TextHeader 14 from carbonui.uianimations import animations 15 from localization import GetByLabel 16 from eve.client.script.ui.control.loadingContainer import LoadingContainer 17 18 class PinnedPage(Container): 19 20 def __init__(self, *args, **kwargs): 21 super(PinnedPage, self).__init__(*args, **kwargs) 22 self.opacity = 0.0 23 self.construct_layout() 24 self.connect_signals() 25 26 def Close(self): 27 try: 28 self.disconnect_signals() 29 finally: 30 super(PinnedPage, self).Close() 31 32 def connect_signals(self): 33 on_window_state_changed.connect(self.on_window_state_changed) 34 on_achievement_pinned.connect(self.on_achievement_pinned) 35 on_achievement_unpinned.connect(self.on_achievement_unpinned) 36 on_achievements_pinned_changed.connect(self.on_achievements_pinned_changed) 37 38 def disconnect_signals(self): 39 on_window_state_changed.disconnect(self.on_window_state_changed) 40 on_achievement_pinned.disconnect(self.on_achievement_pinned) 41 on_achievement_unpinned.disconnect(self.on_achievement_unpinned) 42 on_achievements_pinned_changed.disconnect(self.on_achievements_pinned_changed) 43 44 def construct_layout(self): 45 self.loading_container = LoadingContainer(parent=self, failureStateMessage=GetByLabel('UI/Achievements/Error/InternalError'), failureStateMessageColor=TextColor.NORMAL, retryBtnLabel=GetByLabel('UI/Achievements/Error/RetryButton'), errorLoggingEnabled=False) 46 self.content_container = ScrollContainer(name='content_container', parent=self.loading_container, padding=(16, 16, 16, 16)) 47 48 def update(self): 49 self.loading_container.LoadContent(loadCallback=self.update_async) 50 51 def update_async(self): 52 self.content_container.Flush() 53 self.content_container.state = uiconst.UI_DISABLED 54 pinned_achievements = get_repository().activity.get_pinned_achievements() 55 if len(pinned_achievements) == 0: 56 TextHeader(name='no_achievements_label', parent=self.content_container, align=Align.TOTOP, textAlign=TextAlign.CENTER, text=GetByLabel('UI/Achievements/Window/Pinned/NoPinned'), padTop=16) 57 return 58 self.update_card_grid(pinned_achievements) 59 self.content_container.state = ScrollContainer.default_state 60 61 def update_card_grid(self, pinned_achievements): 62 self.card_grid = FlowContainer(name='card_grid', parent=self.content_container, align=Align.TOTOP, contentSpacing=(32, 16)) 63 for achievement_id in pinned_achievements: 64 achievement_attributes = get_repository().definitions.get_achievement(achievement_id) 65 achievement_entry = AchievementDefinitionEntry(achievement_id, achievement_attributes) 66 CompactAchievementCard(parent=self.card_grid, controller=AchievementEntryController(achievement_entry)) 67 68 def on_window_state_changed(self, window_state): 69 if window_state == WindowState.PINNED: 70 self.update() 71 self.state = uiconst.UI_PICKCHILDREN 72 animations.FadeIn(self, duration=TRANSITION_DURATION) 73 else: 74 self.state = uiconst.UI_DISABLED 75 animations.FadeOut(self, duration=TRANSITION_DURATION) 76 77 def on_achievement_pinned(self, *args): 78 if self.is_active: 79 self.update() 80 81 def on_achievement_unpinned(self, *args): 82 if self.is_active: 83 self.update() 84 85 def on_achievements_pinned_changed(self, *args): 86 if self.is_active: 87 self.update() 88 89 @property 90 def is_active(self): 91 return self.state != uiconst.UI_DISABLED