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

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