section.py (5721B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\card\section.py 2 import threadutils 3 from achievement_system.client.ui.controller.achievement_entry import AchievementEntryController 4 from achievement_system.client.ui.window.card.compact_card import CompactAchievementCard 5 from achievement_system.client.ui.window.signal import on_category_selected 6 from carbonui import Align, ButtonFrameType, Density, TextAlign, TextColor 7 from carbonui.control.button import Button 8 from carbonui.primitives.container import Container 9 from carbonui.primitives.flowcontainer import FlowContainer 10 from carbonui.primitives.frame import Frame 11 from carbonui.text.styles import TextHeadline, TextBody, TextHeader 12 from localization import GetByLabel 13 14 class AchievementCardSection(Container): 15 default_height = 322 16 17 def __init__(self, achievement_entries = None, label_text = None, *args, **kwargs): 18 super(AchievementCardSection, self).__init__(*args, **kwargs) 19 self._achievement_entries = achievement_entries 20 self._label_text = label_text 21 self.construct_layout() 22 self.update() 23 self.connect_signals() 24 25 def Close(self): 26 try: 27 self.disconnect_signals() 28 finally: 29 super(AchievementCardSection, self).Close() 30 31 def connect_signals(self): 32 self.card_container.on_size_changed.connect(self.on_size_changed_signal) 33 34 def disconnect_signals(self): 35 self.card_container.on_size_changed.disconnect(self.on_size_changed_signal) 36 37 def construct_layout(self): 38 self.Flush() 39 self.construct_header() 40 self.construct_card_row() 41 self.update() 42 43 def construct_header(self): 44 self.header_container = Container(name='header_container', parent=self, align=Align.TOTOP, height=30, padBottom=8) 45 self.name_label = TextHeader(name='name_label', parent=self.header_container, align=Align.CENTERLEFT, color=TextColor.HIGHLIGHT) 46 47 def construct_card_row(self): 48 self.card_row_container = Container(name='card_row_container', parent=self, align=Align.TOTOP, height=284, padTop=8) 49 self.construct_card_row_background() 50 self.card_container = FlowContainer(name='card_container', parent=self.card_row_container, align=Align.TOTOP, contentSpacing=(32, 0), padTop=10) 51 52 def construct_card_row_background(self): 53 pass 54 55 @threadutils.highlander_threaded 56 def update(self): 57 self.update_labels() 58 self.update_cards() 59 60 def update_labels(self): 61 self.name_label.text = self.label_text 62 63 def update_cards(self): 64 if self.achievement_entries is None: 65 self.card_container.Flush() 66 return 67 num_total_entries = len(self.achievement_entries) 68 max_cards_per_row = self.num_cards_per_row 69 num_rendered_cards = len(self.card_container.children) 70 if num_total_entries <= max_cards_per_row: 71 entries_to_render = self.achievement_entries 72 else: 73 entries_to_render = self.achievement_entries[:max_cards_per_row] 74 if len(entries_to_render) == num_rendered_cards: 75 return 76 self.card_container.Flush() 77 for achievement_entry in entries_to_render: 78 self.create_card(achievement_entry) 79 80 def create_card(self, achievement_entry): 81 CompactAchievementCard(parent=self.card_container, controller=AchievementEntryController(achievement_entry)) 82 83 def on_size_changed_signal(self, *args): 84 self.update() 85 86 @property 87 def achievement_entries(self): 88 return self._achievement_entries 89 90 @achievement_entries.setter 91 def achievement_entries(self, value): 92 self._achievement_entries = value 93 self.update() 94 95 @property 96 def label_text(self): 97 return self._label_text 98 99 @property 100 def num_cards_per_row(self): 101 w, h = self.card_container.GetAbsoluteSize() 102 num_cards = (w + 14) / (CompactAchievementCard.default_width + 32) 103 return max(1, num_cards) 104 105 106 class AchievementCategorySection(AchievementCardSection): 107 108 def __init__(self, controller, *args, **kwargs): 109 self.controller = controller 110 super(AchievementCategorySection, self).__init__(*args, **kwargs) 111 112 def construct_header(self): 113 self.header_container = Container(name='header_container', parent=self, align=Align.TOTOP, height=30) 114 self.name_label = TextHeadline(name='name_label', parent=self.header_container, align=Align.TOLEFT, color=TextColor.HIGHLIGHT) 115 self.amount_label = TextBody(name='amount_label', parent=self.header_container, align=Align.TOLEFT, color=TextColor.SECONDARY, padding=(12, 7, 0, 0)) 116 Button(name='view_all_button', parent=self.header_container, align=Align.CENTERRIGHT, label=GetByLabel('UI/Achievements/Window/Section/ViewAllButton'), density=Density.COMPACT, frame_type=ButtonFrameType.CUT_BOTTOM_RIGHT, func=self.on_view_all_button_click) 117 118 def construct_card_row_background(self): 119 Frame(bgParent=self.card_row_container, texturePath='res:/UI/Texture/classes/shipTree/infoPanel/selected.png', cornerSize=10) 120 121 def update_labels(self): 122 super(AchievementCategorySection, self).update_labels() 123 self.amount_label.text = GetByLabel(labelNameAndPath='UI/Achievements/Window/Section/HeaderAmount', amount=len(self.achievement_entries)) 124 125 def on_view_all_button_click(self, *args): 126 on_category_selected(self.controller.category_id) 127 128 @property 129 def achievement_entries(self): 130 return self.controller.achievement_entries 131 132 @property 133 def label_text(self): 134 return self.controller.name_text