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

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