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