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

expanded_card.py (8803B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\card\expanded_card.py
      2 import threadutils
      3 from achievement_system.client.api.signal import on_achievement_completed, on_achievement_progressed, on_admin_achievement_reset, on_admin_achievement_reset_all
      4 from achievement_system.client.qa import is_qa
      5 from achievement_system.client.qa.actions import qa_complete_achievement, qa_progress_achievement, qa_reset_achievement
      6 from achievement_system.client.ui.controller.achievement_entry import AchievementEntryController
      7 from achievement_system.client.ui.window.card.components.contribution import AchievementContribution, ChecklistContribution
      8 from achievement_system.client.ui.window.card.components.header import AchievementHeader
      9 from achievement_system.client.ui.window.card.components.milestones import AchievementMilestonesExpanded
     10 from achievement_system.client.ui.window.card.components.pin_button import PinButton
     11 from achievement_system.client.ui.window.card.components.progress import AchievementProgressExpanded
     12 from achievement_system.client.ui.window.card.components.rewards import AchievementRewardsExpanded
     13 from achievement_system.client.ui.window.card.components.track_button import TrackButton
     14 from carbonui import Align, uiconst, TextAlign, TextColor
     15 from carbonui.button.group import ButtonGroup, ButtonSizeMode
     16 from carbonui.control.contextMenu.menuData import MenuData
     17 from carbonui.primitives.container import Container
     18 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     19 from carbonui.primitives.frame import Frame
     20 from carbonui.primitives.stretchspritehorizontal import StretchSpriteHorizontal
     21 from carbonui.text.styles import TextDetail
     22 from eve.client.script.ui import eveColor
     23 from signals import Signal
     24 CONTENT_LEFT_INSET = 54
     25 
     26 class ExpandedAchievementCard(ContainerAutoSize):
     27     default_state = uiconst.UI_NORMAL
     28     default_width = 567
     29 
     30     def __init__(self, controller, *args, **kwargs):
     31         super(ExpandedAchievementCard, self).__init__(*args, **kwargs)
     32         self.track_button = None
     33         self.controller = controller
     34         self.on_update_complete = Signal('on_update_complete')
     35         self.construct_layout()
     36         self.update()
     37         self.connect_signals()
     38         self.on_size_changed_signal(*self.GetAbsoluteSize())
     39 
     40     def Close(self):
     41         try:
     42             self.disconnect_signals()
     43         finally:
     44             super(ExpandedAchievementCard, self).Close()
     45 
     46     def connect_signals(self):
     47         on_achievement_completed.connect(self.on_achievement_completed)
     48         on_achievement_progressed.connect(self.on_achievement_progressed)
     49         on_admin_achievement_reset.connect(self.on_achievement_reset)
     50         on_admin_achievement_reset_all.connect(self.on_achievement_reset_all)
     51         self.controller.on_selected_milestone_changed.connect(self.on_selected_milestone_changed)
     52         self.on_size_changed.connect(self.on_size_changed_signal)
     53 
     54     def disconnect_signals(self):
     55         on_achievement_completed.disconnect(self.on_achievement_completed)
     56         on_achievement_progressed.disconnect(self.on_achievement_progressed)
     57         on_admin_achievement_reset.disconnect(self.on_achievement_reset)
     58         on_admin_achievement_reset_all.disconnect(self.on_achievement_reset_all)
     59         self.controller.on_selected_milestone_changed.disconnect(self.on_selected_milestone_changed)
     60         self.on_size_changed.disconnect(self.on_size_changed_signal)
     61 
     62     def construct_layout(self):
     63         self.construct_background()
     64         self.construct_header()
     65         self.construct_content_container()
     66         self.construct_milestones()
     67         self.construct_progress()
     68         self.construct_contribution()
     69         self.construct_rewards()
     70         self.construct_buttons()
     71         self.construct_flavor_text()
     72 
     73     def construct_background(self):
     74         background_container = Container(name='background_container', bgParent=self)
     75         self.background_frame = Frame(name='background_frame', parent=background_container, texturePath='res:/UI/Texture/classes/Achievements/card/expanded_bg_frame.png', cornerSize=176, uiScaleVertices=True)
     76         self.background_fill = Frame(name='background_fill', parent=background_container, texturePath='res:/UI/Texture/classes/Achievements/card/expanded_bg_fill.png', cornerSize=176, uiScaleVertices=True)
     77 
     78     def construct_header(self):
     79         self.header = AchievementHeader(name='header', parent=self, align=Align.TOTOP, controller=self.controller, padding=(8, 8, 1, 0))
     80 
     81     def construct_content_container(self):
     82         self.content_container = ContainerAutoSize(name='content_container', parent=self, align=Align.TOTOP, padding=(CONTENT_LEFT_INSET + 24,
     83          0,
     84          24,
     85          24))
     86 
     87     def construct_milestones(self):
     88         if not self.controller.has_multiple_milestones:
     89             return
     90         self.milestones = AchievementMilestonesExpanded(name='milestones', parent=self.content_container, align=Align.TOTOP, controller=self.controller, padTop=20)
     91 
     92     def construct_progress(self):
     93         self.progress = AchievementProgressExpanded(name='progress', parent=self.content_container, align=Align.TOTOP, controller=self.controller, padTop=16)
     94 
     95     def construct_contribution(self):
     96         self.contribution_class(name='contribution', parent=self.content_container, align=Align.TOTOP, controller=self.controller, padTop=16)
     97 
     98     def construct_rewards(self):
     99         self.rewards = AchievementRewardsExpanded(name='rewards', parent=self.content_container, align=Align.TOTOP, controller=self.controller, padTop=16)
    100 
    101     def construct_buttons(self):
    102         button_group = ButtonGroup(name='button_group', parent=self.content_container, align=Align.TOTOP, button_size_mode=ButtonSizeMode.STRETCH, padTop=16)
    103         self.track_button = TrackButton(name='track_button', parent=button_group, align=Align.TOTOP, controller=self.controller)
    104         PinButton(name='pin_button', parent=button_group, align=Align.TOTOP, controller=self.controller)
    105 
    106     def add_divider(self):
    107         StretchSpriteHorizontal(name='divider', parent=self.content_container, align=Align.TOTOP, texturePath='res:/UI/Texture/classes/Achievements/card/expanded_card_divider.png', leftEdgeSize=52, rightEdgeSize=52, opacity=0.1, height=1, padTop=16)
    108 
    109     def construct_flavor_text(self):
    110         if not self.controller.has_flavor_text:
    111             return
    112         self.add_divider()
    113         self.flavor_label = TextDetail(name='flavor_label', parent=self.content_container, align=Align.TOTOP, textAlign=TextAlign.CENTER, color=TextColor.SECONDARY, italic=True, padTop=14)
    114 
    115     @threadutils.highlander_threaded
    116     def update(self):
    117         self.update_background()
    118         self.header.update()
    119         self.progress.update()
    120         self.rewards.update()
    121         self.update_flavor_text()
    122         self.on_update_complete()
    123 
    124     def update_background(self):
    125         self.background_frame.color = eveColor.WHITE
    126         self.background_frame.opacity = 0.2
    127 
    128     def update_flavor_text(self):
    129         if not self.controller.has_flavor_text:
    130             return
    131         self.flavor_label.text = self.controller.flavor_text
    132 
    133     @property
    134     def contribution_class(self):
    135         if self.controller.is_checklist:
    136             return ChecklistContribution
    137         return AchievementContribution
    138 
    139     def on_achievement_completed(self, achievement_id):
    140         if achievement_id == self.controller.achievement_entry.identifier:
    141             self.update()
    142 
    143     def on_achievement_progressed(self, achievement_id, achievement_state):
    144         if achievement_id == self.controller.achievement_entry.identifier:
    145             self.update()
    146 
    147     def on_achievement_reset(self, achievement_id):
    148         if achievement_id == self.controller.achievement_entry.identifier:
    149             self.update()
    150 
    151     def on_achievement_reset_all(self):
    152         self.update()
    153 
    154     def on_selected_milestone_changed(self):
    155         self.update()
    156 
    157     def on_size_changed_signal(self, *args):
    158         self.background_frame.displayWidth = self.displayWidth
    159         self.background_frame.displayHeight = self.displayHeight
    160         self.background_fill.displayWidth = self.displayWidth
    161         self.background_fill.displayHeight = self.displayHeight
    162 
    163     def GetMenu(self):
    164         menu_data = MenuData()
    165         if is_qa():
    166             menu_data.AddEntry('QA: Complete Achievement', lambda : qa_complete_achievement(self.controller.achievement_entry.identifier))
    167             menu_data.AddEntry('QA: Progress Achievement', lambda : qa_progress_achievement(self.controller.achievement_entry.identifier))
    168             menu_data.AddEntry('QA: Reset Achievement', lambda : qa_reset_achievement(self.controller.achievement_entry.identifier))
    169         return menu_data