achievements_page.py (5922B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\page\achievements\achievements_page.py 2 import eveicon 3 from achievement_system.client.api.repository import get_repository 4 from achievement_system.client.api.signal import on_definitions_loaded 5 from achievement_system.client.ui.controller.category import AchievementCategoryController 6 from achievement_system.client.ui.settings import achievements_side_navigation_expanded 7 from achievement_system.client.ui.window.const import WindowState, TRANSITION_DURATION 8 from achievement_system.client.ui.window.page.achievements.navigation.const import get_page_class, is_category_class 9 from achievement_system.client.ui.window.page.achievements.navigation.side_navigation import AchievementsNavigation 10 from achievement_system.client.ui.window.signal import on_category_selected, on_navigation_entry_selected, on_window_state_changed 11 from carbonui import uiconst, Align, ButtonVariant, TextColor 12 from carbonui.control.alert_container import AlertContainer 13 from carbonui.control.sideNavigation import SideNavigationSplitView 14 from carbonui.primitives.container import Container 15 from carbonui.uianimations import animations 16 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel 17 from localization import GetByLabel 18 19 class AchievementsPage(Container): 20 21 def __init__(self, *args, **kwargs): 22 super(AchievementsPage, self).__init__(*args, **kwargs) 23 self.opacity = 0.0 24 self.construct_layout() 25 self.connect_signals() 26 27 def Close(self): 28 try: 29 self.disconnect_signals() 30 finally: 31 super(AchievementsPage, self).Close() 32 33 def connect_signals(self): 34 on_definitions_loaded.connect(self._on_definitions_loaded) 35 on_category_selected.connect(self.on_category_selected) 36 on_navigation_entry_selected.connect(self.on_navigation_entry_selected) 37 on_window_state_changed.connect(self.on_window_state_changed) 38 self.split_view.on_expanded_changed.connect(self.side_navigation.on_expanded_changed) 39 40 def disconnect_signals(self): 41 on_definitions_loaded.disconnect(self._on_definitions_loaded) 42 on_category_selected.disconnect(self.on_category_selected) 43 on_navigation_entry_selected.disconnect(self.on_navigation_entry_selected) 44 on_window_state_changed.disconnect(self.on_window_state_changed) 45 self.split_view.on_expanded_changed.disconnect(self.side_navigation.on_expanded_changed) 46 47 def construct_layout(self): 48 are_definitions_loading = get_repository().are_definitions_loading() 49 are_definitions_loaded = get_repository().are_definitions_loaded() 50 self.split_view = SideNavigationSplitView(name='split_view', parent=self, is_always_expanded_setting=achievements_side_navigation_expanded, expanded_panel_width=240) 51 self.failure_container = AlertContainer(name='failure_container', parent=self.split_view.content, state=uiconst.UI_DISABLED if are_definitions_loaded or are_definitions_loading else AlertContainer.default_state, opacity=0.0 if are_definitions_loaded or are_definitions_loading else 1.0, align=Align.TOTOP_NOPUSH, title=GetByLabel('UI/Achievements/Window/FailureToLoadTitle'), title_color=TextColor.WARNING, description=GetByLabel('UI/Achievements/Window/FailureToLoadDescription'), button_icon=eveicon.refresh, button_label=GetByLabel('UI/Achievements/Window/FailureToLoadButton'), button_action=lambda *args: self._on_synchronize_clicked(), button_variant=ButtonVariant.GHOST, padding=(16, 16, 16, 16)) 52 self.loading_sprite = LoadingWheel(parent=self.split_view.content, align=uiconst.CENTER, opacity=1.0 if are_definitions_loading else 0.0) 53 self.content_container = Container(name='content_container', parent=self.split_view.content, opacity=1.0 if are_definitions_loaded else 0.0, padding=(16, 16, 16, 0)) 54 self.side_navigation = AchievementsNavigation(name='side_navigation', parent=self.split_view.panel, is_always_expanded_setting=achievements_side_navigation_expanded, is_expanded_func=self.split_view.is_expanded, expand_func=self.split_view.expand_panel) 55 56 def _on_synchronize_clicked(self): 57 animations.FadeIn(self.loading_sprite) 58 self.hide_failure_container() 59 get_repository().reload_definitions() 60 61 def _on_definitions_loaded(self): 62 animations.FadeOut(self.loading_sprite) 63 if get_repository().are_definitions_loaded(): 64 self.hide_failure_container() 65 animations.FadeIn(self.content_container) 66 else: 67 self.show_failure_container() 68 animations.FadeOut(self.content_container) 69 self.side_navigation.reload() 70 71 def show_failure_container(self): 72 animations.FadeIn(self.failure_container) 73 self.failure_container.state = AlertContainer.default_state 74 75 def hide_failure_container(self): 76 animations.FadeOut(self.failure_container) 77 self.failure_container.state = uiconst.UI_DISABLED 78 79 def on_category_selected(self, category_id): 80 self.create_page(category_id) 81 82 def on_navigation_entry_selected(self, entry_id): 83 self.create_page(entry_id) 84 85 def create_page(self, entry_id): 86 self.content_container.Flush() 87 page_class = get_page_class(entry_id) 88 if is_category_class(page_class): 89 page_class(parent=self.content_container, controller=AchievementCategoryController(entry_id)) 90 else: 91 page_class(parent=self.content_container) 92 93 def on_window_state_changed(self, window_state): 94 if window_state == WindowState.ACHIEVEMENTS: 95 self.state = uiconst.UI_PICKCHILDREN 96 animations.FadeIn(self, duration=TRANSITION_DURATION) 97 else: 98 self.state = uiconst.UI_DISABLED 99 animations.FadeOut(self, duration=TRANSITION_DURATION)