compact_card.py (6184B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\card\compact_card.py 2 import threadutils 3 import uthread2 4 from achievement_system.client.api.signal import on_achievement_progressed, on_achievement_completed, on_admin_achievement_reset, on_admin_achievement_reset_all 5 from achievement_system.client.ui.controller.achievement_entry import AchievementEntryController 6 from achievement_system.client.ui.window.card.components.icon import AchievementIcon 7 from achievement_system.client.ui.window.card.components.labels import CompactAchievementLabels 8 from achievement_system.client.ui.window.card.components.milestones import DotAchievementMilestones 9 from achievement_system.client.ui.window.card.tooltip import CompactAchievementCardTooltip 10 from achievement_system.client.ui.window.const import COMPACT_CARD_WIDTH, COMPACT_CARD_HEIGHT, TRANSITION_DURATION 11 from carbonui import Align, uiconst 12 from carbonui.primitives.container import Container 13 from carbonui.primitives.containerAutoSize import ContainerAutoSize 14 from carbonui.uianimations import animations 15 from carbonui.uicore import uicore 16 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel 17 from eve.client.script.ui.control.gauge import Gauge 18 19 class CompactAchievementCard(Container): 20 default_width = COMPACT_CARD_WIDTH 21 default_height = COMPACT_CARD_HEIGHT 22 23 def __init__(self, controller, *args, **kwargs): 24 super(CompactAchievementCard, self).__init__(*args, **kwargs) 25 self.controller = controller 26 self.is_hovered = False 27 self.construct_layout() 28 self.update(animate=False) 29 self.connect_signals() 30 31 def Close(self): 32 try: 33 self.disconnect_signals() 34 finally: 35 super(CompactAchievementCard, self).Close() 36 37 def connect_signals(self): 38 on_achievement_completed.connect(self.on_achievement_completed) 39 on_achievement_progressed.connect(self.on_achievement_progressed) 40 on_admin_achievement_reset.connect(self.on_achievement_reset) 41 on_admin_achievement_reset_all.connect(self.on_achievement_reset_all) 42 43 def disconnect_signals(self): 44 on_achievement_completed.disconnect(self.on_achievement_completed) 45 on_achievement_progressed.disconnect(self.on_achievement_progressed) 46 on_admin_achievement_reset.disconnect(self.on_achievement_reset) 47 on_admin_achievement_reset_all.disconnect(self.on_achievement_reset_all) 48 49 def construct_layout(self): 50 self.construct_containers() 51 self.construct_icon() 52 self.construct_labels() 53 self.construct_milestone_container() 54 self.construct_progress() 55 56 def construct_containers(self): 57 self.loading_wheel = LoadingWheel(name='loading_wheel', parent=self, align=Align.CENTER) 58 self.hover_area = Container(name='hover_area', parent=self, align=Align.CENTER, state=uiconst.UI_NORMAL, width=COMPACT_CARD_WIDTH - 16, height=COMPACT_CARD_HEIGHT - 16) 59 self.hover_area.OnMouseEnter = self.on_hover_area_mouse_enter 60 self.hover_area.OnMouseExit = self.on_hover_area_mouse_exit 61 self.content_container = Container(name='content_container', parent=self, opacity=0.0, padding=(0, 8, 0, 8)) 62 63 def construct_icon(self): 64 icon_container = Container(name='icon_container', parent=self.content_container, align=Align.TOTOP, height=128, padBottom=8) 65 self.icon = AchievementIcon(name='icon', parent=icon_container, align=Align.CENTER, state=uiconst.UI_NORMAL, controller=self.controller) 66 67 @threadutils.highlander_threaded 68 def on_hover_area_mouse_enter(self, *args): 69 self.is_hovered = True 70 uthread2.Sleep(0.25) 71 if not self.is_hovered: 72 return 73 self.controller.set_selected_milestone_index(self.controller.current_milestone_index) 74 CompactAchievementCardTooltip(parent=uicore.layer.modal, anchor=self.icon, controller=self.controller) 75 76 def on_hover_area_mouse_exit(self, *args): 77 self.is_hovered = False 78 79 def construct_labels(self): 80 self.labels = CompactAchievementLabels(name='labels', parent=self.content_container, align=Align.TOTOP, controller=self.controller) 81 82 def construct_milestone_container(self): 83 self.milestone_container = ContainerAutoSize(name='milestone_container', parent=self.content_container, align=Align.TOTOP, padTop=2) 84 85 def construct_progress(self): 86 self.progress_bar = Gauge(name='progress_bar', parent=self.content_container, align=Align.TOBOTTOM, gaugeHeight=4) 87 88 def construct_milestone_markers(self): 89 if not self.controller.has_multiple_milestones: 90 return 91 self.milestone_container.Flush() 92 DotAchievementMilestones(name='milestones', parent=self.milestone_container, align=Align.TOTOP, controller=self.controller) 93 94 @threadutils.highlander_threaded 95 def update(self, animate = True): 96 self.progress_bar.SetValue(self.controller.percent_progress_towards_current_milestone, animate=animate) 97 self.update_color_theme() 98 self.icon.update() 99 if self.controller.has_multiple_milestones: 100 self.construct_milestone_markers() 101 animations.FadeOut(self.loading_wheel, duration=TRANSITION_DURATION) 102 animations.FadeIn(self.content_container, duration=TRANSITION_DURATION) 103 104 def update_color_theme(self): 105 self.progress_bar.SetColor(self.controller.progress_bar_color) 106 107 def OnColorThemeChanged(self): 108 super(CompactAchievementCard, self).OnColorThemeChanged() 109 self.update_color_theme() 110 111 def on_achievement_completed(self, achievement_id): 112 if achievement_id == self.controller.achievement_entry.identifier: 113 self.update() 114 115 def on_achievement_progressed(self, achievement_id, achievement_state): 116 if achievement_id == self.controller.achievement_entry.identifier: 117 self.update() 118 119 def on_achievement_reset(self, achievement_id): 120 if achievement_id == self.controller.achievement_entry.identifier: 121 self.update() 122 123 def on_achievement_reset_all(self): 124 self.update()