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

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)