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

window.py (9442B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\window.py
      2 import logging
      3 import threadutils
      4 import uthread2
      5 from achievement_system.client.api.repository import get_repository
      6 from achievement_system.client.api.signal import on_achievements_pinned_changed, on_achievement_milestone_reward_claimed, on_achievement_milestone_reached
      7 from achievement_system.client.model.definition.achievement.entry import AchievementDefinitionEntry
      8 from achievement_system.client.qa import is_qa
      9 from achievement_system.client.qa.menu import add_window_context_menu
     10 from achievement_system.client.ui.controller.achievement_entry import AchievementEntryController
     11 from achievement_system.client.ui.window.card.expanded_card_overlay import AchievementCardOverlay
     12 from achievement_system.client.ui.window.const import NavigationEntryID, TabID, WindowState
     13 from achievement_system.client.ui.window.navigation.score import AchievementScore
     14 from achievement_system.client.ui.window.page.achievements.achievements_page import AchievementsPage
     15 from achievement_system.client.ui.window.page.pinned.pinned_page import PinnedPage
     16 from achievement_system.client.ui.window.page.rewards.rewards_page import RewardsPage
     17 from achievement_system.client.ui.window.signal import on_achievement_selected, on_navigation_entry_selected, on_window_state_changed
     18 from achievement_system.common.const import LOGGER_NAME
     19 from carbonui import Align
     20 from carbonui.control.window import Window
     21 from carbonui.primitives.container import Container
     22 from carbonui.window.header.tab_navigation import TabNavigationWindowHeader
     23 from carbonui.window.header.tab_with_count import TabWithCount
     24 from eve.client.script.ui import eveColor
     25 from localization import GetByLabel
     26 from player_messaging.client.ui_message import message_player
     27 logger = logging.getLogger(LOGGER_NAME)
     28 
     29 class AchievementsWindow(Window):
     30     default_apply_content_padding = False
     31     default_captionLabelPath = 'UI/Achievements/Window/Title'
     32     default_descriptionLabelPath = 'UI/Achievements/Window/Description'
     33     default_iconNum = 'res:/UI/Texture/WindowIcons/achievements.png'
     34     default_width = 1040
     35     default_height = 825
     36     default_minSize = (900, 600)
     37     default_windowID = 'AchievementsWindow'
     38     default_analyticID = default_windowID
     39     default_isStackable = False
     40 
     41     def __init__(self, *args, **kwargs):
     42         super(AchievementsWindow, self).__init__(*args, **kwargs)
     43         self.construct_layout()
     44         self.connect_signals()
     45         self.set_initial_state()
     46 
     47     def Close(self, setClosed = False, *args, **kwds):
     48         try:
     49             self.disconnect_signals()
     50         finally:
     51             return super(AchievementsWindow, self).Close(setClosed, *args, **kwds)
     52 
     53     def Prepare_Header_(self):
     54         self.header = TabNavigationWindowHeader(on_tab_selected=self.on_header_tab_selected)
     55 
     56     def connect_signals(self):
     57         on_achievement_selected.connect(self.on_achievement_selected)
     58         on_window_state_changed.connect(self.on_window_state_changed)
     59         on_achievements_pinned_changed.connect(self.on_achievements_pinned_changed)
     60         on_achievement_milestone_reward_claimed.connect(self.on_achievement_milestone_reward_claimed)
     61         on_achievement_milestone_reached.connect(self.on_achievement_milestone_reached)
     62 
     63     def disconnect_signals(self):
     64         on_achievement_selected.disconnect(self.on_achievement_selected)
     65         on_window_state_changed.disconnect(self.on_window_state_changed)
     66         on_achievements_pinned_changed.disconnect(self.on_achievements_pinned_changed)
     67         on_achievement_milestone_reward_claimed.disconnect(self.on_achievement_milestone_reward_claimed)
     68         on_achievement_milestone_reached.disconnect(self.on_achievement_milestone_reached)
     69 
     70     @classmethod
     71     def open_achievement(cls, achievement_id):
     72         achievement_attributes = get_repository().definitions.get_achievement(achievement_id)
     73         if achievement_attributes is None:
     74             AchievementsWindow.message_player_achievement_not_found()
     75             return
     76         window = cls.GetIfOpen()
     77         if window is None:
     78             window = AchievementsWindow.Open()
     79         window.Maximize()
     80         on_window_state_changed(WindowState.ACHIEVEMENTS)
     81         on_navigation_entry_selected(achievement_attributes.parent_category)
     82         on_achievement_selected(AchievementDefinitionEntry(achievement_id, achievement_attributes))
     83 
     84     @classmethod
     85     def open_unclaimed_rewards(cls):
     86         window = cls.GetIfOpen()
     87         if window is None:
     88             window = AchievementsWindow.Open()
     89         if window.IsMinimized():
     90             window.Maximize()
     91         on_window_state_changed(WindowState.REWARDS)
     92 
     93     @classmethod
     94     def open_category(cls, category_id):
     95         if category_id is None:
     96             AchievementsWindow.message_player_category_not_found()
     97             return
     98         window = cls.GetIfOpen()
     99         if window is None:
    100             window = AchievementsWindow.Open()
    101         if window.IsMinimized():
    102             window.Maximize()
    103         on_window_state_changed(WindowState.ACHIEVEMENTS)
    104         on_navigation_entry_selected(category_id)
    105 
    106     @classmethod
    107     def message_player_achievement_not_found(cls):
    108         message_player(GetByLabel('UI/Achievements/Link/AchievementLinkError'))
    109 
    110     @classmethod
    111     def message_player_category_not_found(cls):
    112         message_player(GetByLabel('UI/Achievements/Link/CategoryLinkError'))
    113 
    114     def construct_layout(self):
    115         self.construct_navigation_bar()
    116         self.construct_overlay_container()
    117         self.construct_content_pages()
    118 
    119     def construct_navigation_bar(self):
    120         self.header.tab_group.AddTab(label=GetByLabel('UI/Achievements/Window/Tab/Achievements'), tabID=TabID.ACHIEVEMENTS)
    121         self.pinned_tab = self.header.tab_group.AddTab(label=GetByLabel('UI/Achievements/Window/Tab/Pinned'), tabID=TabID.PINNED, tabClass=TabWithCount, count_bg_color=eveColor.FOCUS_BLUE)
    122         self.rewards_tab = self.header.tab_group.AddTab(label=GetByLabel('UI/Achievements/Window/Tab/Rewards'), tabID=TabID.REWARDS, tabClass=TabWithCount, count_bg_color=eveColor.WARNING_ORANGE)
    123         AchievementScore(name='achievement_score', parent=self.header.extra_content, align=Align.CENTERRIGHT)
    124 
    125     def construct_overlay_container(self):
    126         self.overlay_container = Container(name='overlay_container', parent=self.content)
    127 
    128     def construct_content_pages(self):
    129         self.content_page_container = Container(name='content_page_container', parent=self.content, align=Align.TOALL, padTop=16)
    130         AchievementsPage(name='achievements_page', parent=self.content_page_container, align=Align.TOALL)
    131         PinnedPage(name='pinned_page', parent=self.content_page_container, align=Align.TOALL)
    132         RewardsPage(name='rewards_page', parent=self.content_page_container, align=Align.TOALL)
    133 
    134     def set_initial_state(self):
    135         on_window_state_changed(WindowState.ACHIEVEMENTS)
    136         on_navigation_entry_selected(NavigationEntryID.OVERVIEW)
    137         self.update_pinned_count()
    138         self.update_rewards_count()
    139 
    140     @threadutils.highlander_threaded
    141     def update_pinned_count(self):
    142         try:
    143             self.pinned_tab.count = len(get_repository().activity.get_pinned_achievements())
    144         except AttributeError:
    145             return
    146 
    147     @threadutils.highlander_threaded
    148     def update_rewards_count(self):
    149         try:
    150             self.rewards_tab.count = get_repository().get_unclaimed_rewards_row_count()
    151         except (AttributeError, TypeError):
    152             return
    153 
    154     def on_header_tab_selected(self, new_tab_id, old_tab_id):
    155         if new_tab_id == old_tab_id:
    156             return
    157         if new_tab_id == TabID.ACHIEVEMENTS:
    158             on_window_state_changed(WindowState.ACHIEVEMENTS)
    159         elif new_tab_id == TabID.PINNED:
    160             on_window_state_changed(WindowState.PINNED)
    161         elif new_tab_id == TabID.REWARDS:
    162             on_window_state_changed(WindowState.REWARDS)
    163 
    164     def on_achievement_selected(self, achievement_entry):
    165         logger.info('Achievement selected: %s' % achievement_entry)
    166         self.overlay_container.Flush()
    167         AchievementCardOverlay(name='overlay', parent=self.overlay_container, controller=AchievementEntryController(achievement_entry))
    168 
    169     def on_window_state_changed(self, window_state):
    170         self.overlay_container.Flush()
    171         if window_state == WindowState.ACHIEVEMENTS:
    172             self.header.tab_group.SelectByID(TabID.ACHIEVEMENTS, silent=True, useCallback=False)
    173         elif window_state == WindowState.PINNED:
    174             self.header.tab_group.SelectByID(TabID.PINNED, silent=True, useCallback=False)
    175         elif window_state == WindowState.REWARDS:
    176             self.header.tab_group.SelectByID(TabID.REWARDS, silent=True, useCallback=False)
    177 
    178     def on_achievements_pinned_changed(self, pinned_achievements):
    179         self.pinned_tab.count = len(pinned_achievements)
    180 
    181     @uthread2.debounce(0.2)
    182     def on_achievement_milestone_reward_claimed(self, achievement_id, milestone_id):
    183         self.update_rewards_count()
    184 
    185     @uthread2.debounce(0.2)
    186     def on_achievement_milestone_reached(self, achievement_id, milestone_id):
    187         self.update_rewards_count()
    188 
    189     def GetMenu(self):
    190         menu = super(AchievementsWindow, self).GetMenu()
    191         if is_qa():
    192             add_window_context_menu(menu)
    193         return menu