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

labels.py (7790B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\card\components\labels.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.ui.window.const import COMPACT_CARD_WIDTH, TRANSITION_DURATION
      5 from carbonui import Align, TextAlign, TextColor, uiconst
      6 from carbonui.control.scrollContainer import ScrollContainer
      7 from carbonui.primitives.container import Container
      8 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      9 from carbonui.text.styles import TextBody, TextHeadline
     10 from carbonui.uianimations import animations
     11 from signals import Signal
     12 NAME_ALIGN_THRESHOLD = COMPACT_CARD_WIDTH
     13 DESCRIPTION_ALIGN_MEASURE = COMPACT_CARD_WIDTH
     14 DESCRIPTION_ALIGN_THRESHOLD = 57
     15 
     16 class CompactAchievementLabels(Container):
     17     default_height = 102
     18 
     19     def __init__(self, controller, *args, **kwargs):
     20         super(CompactAchievementLabels, self).__init__(*args, **kwargs)
     21         self.controller = controller
     22         self.on_name_click = Signal('on_name_click')
     23         self.construct_layout()
     24         self.update()
     25         self.connect_signals()
     26 
     27     def Close(self):
     28         try:
     29             self.disconnect_signals()
     30         finally:
     31             super(CompactAchievementLabels, self).Close()
     32 
     33     def connect_signals(self):
     34         on_achievement_completed.connect(self.on_achievement_completed)
     35         on_achievement_progressed.connect(self.on_achievement_progressed)
     36         on_admin_achievement_reset.connect(self.on_achievement_reset)
     37         on_admin_achievement_reset_all.connect(self.on_achievement_reset_all)
     38 
     39     def disconnect_signals(self):
     40         on_achievement_completed.disconnect(self.on_achievement_completed)
     41         on_achievement_progressed.disconnect(self.on_achievement_progressed)
     42         on_admin_achievement_reset.disconnect(self.on_achievement_reset)
     43         on_admin_achievement_reset_all.disconnect(self.on_achievement_reset_all)
     44 
     45     def construct_layout(self):
     46         name_container = Container(name='name_container', parent=self, align=Align.TOTOP, height=37)
     47         self.name_label = TextHeadline(name='name_label', parent=name_container, align=self.name_label_align, state=uiconst.UI_NORMAL, color=TextColor.HIGHLIGHT, maxLines=1, autoFadeSides=16)
     48         self.name_label.OnClick = self.on_name_label_click
     49         self.description_container = Container(name='description_container', parent=self, align=Align.TOTOP, height=65)
     50         self.scroll_container = ScrollContainer(name='scroll_container', parent=self.description_container, padding=(0, 4, 0, 4))
     51 
     52     def construct_description(self):
     53         self.scroll_container.Flush()
     54         self.description_label = TextBody(name='description_label', parent=self.scroll_container, align=self.description_label_align, text=self.description_text, textAlign=TextAlign.CENTER, color=TextColor.HIGHLIGHT)
     55 
     56     @threadutils.highlander_threaded
     57     def update(self):
     58         self.name_label.text = self.controller.name
     59         self.construct_description()
     60 
     61     @property
     62     def name_label_align(self):
     63         text_width, _ = TextHeadline.MeasureTextSize(self.controller.name)
     64         if text_width > NAME_ALIGN_THRESHOLD:
     65             return uiconst.TOLEFT
     66         return uiconst.CENTER
     67 
     68     @property
     69     def description_label_align(self):
     70         _, text_height = TextBody.MeasureTextSize(text=self.description_text, width=DESCRIPTION_ALIGN_MEASURE)
     71         if text_height > DESCRIPTION_ALIGN_THRESHOLD:
     72             return uiconst.TOTOP
     73         return uiconst.VERTICALLY_CENTERED
     74 
     75     @property
     76     def description_text(self):
     77         return self.controller.description_for_selected_milestone
     78 
     79     def on_achievement_completed(self, achievement_id):
     80         if achievement_id == self.controller.achievement_entry.identifier:
     81             self.update()
     82 
     83     def on_achievement_progressed(self, achievement_id, achievement_state):
     84         if achievement_id == self.controller.achievement_entry.identifier:
     85             self.update()
     86 
     87     def on_achievement_reset(self, achievement_id):
     88         if achievement_id == self.controller.achievement_entry.identifier:
     89             self.update()
     90 
     91     def on_achievement_reset_all(self):
     92         self.update()
     93 
     94     def on_name_label_click(self, *args):
     95         self.on_name_click()
     96 
     97 
     98 class HoverAchievementLabels(ContainerAutoSize):
     99 
    100     def __init__(self, controller, *args, **kwargs):
    101         super(HoverAchievementLabels, self).__init__(*args, **kwargs)
    102         self.controller = controller
    103         self.on_name_click = Signal('on_name_click')
    104         self.construct_layout()
    105         self.update()
    106         self.connect_signals()
    107 
    108     def Close(self):
    109         try:
    110             self.disconnect_signals()
    111         finally:
    112             super(HoverAchievementLabels, self).Close()
    113 
    114     def connect_signals(self):
    115         on_achievement_completed.connect(self.on_achievement_completed)
    116         on_achievement_progressed.connect(self.on_achievement_progressed)
    117         on_admin_achievement_reset.connect(self.on_achievement_reset)
    118         on_admin_achievement_reset_all.connect(self.on_achievement_reset_all)
    119 
    120     def disconnect_signals(self):
    121         on_achievement_completed.disconnect(self.on_achievement_completed)
    122         on_achievement_progressed.disconnect(self.on_achievement_progressed)
    123         on_admin_achievement_reset.disconnect(self.on_achievement_reset)
    124         on_admin_achievement_reset_all.disconnect(self.on_achievement_reset_all)
    125 
    126     def construct_layout(self):
    127         name_container = Container(name='name_container', parent=self, align=Align.TOTOP, height=37)
    128         self.name_label = TextHeadline(name='name_label', parent=name_container, align=self.name_label_align, state=uiconst.UI_NORMAL, color=TextColor.HIGHLIGHT, maxLines=1, autoFadeSides=16)
    129         self.name_label.OnClick = self.on_name_label_click
    130         self.description_container = Container(name='description_container', parent=self, align=Align.TOTOP, clipChildren=True, height=65, padTop=4)
    131         self.description_label = TextBody(name='description_label', parent=self.description_container, align=Align.VERTICALLY_CENTERED, textAlign=TextAlign.CENTER, color=TextColor.HIGHLIGHT)
    132 
    133     def animate_in(self, duration = TRANSITION_DURATION):
    134         _, text_height = TextBody.MeasureTextSize(self.description_text, width=COMPACT_CARD_WIDTH)
    135         animations.MorphScalar(obj=self.description_container, attrName='height', startVal=self.description_container.height, endVal=text_height, duration=duration)
    136 
    137     @threadutils.highlander_threaded
    138     def update(self):
    139         self.name_label.text = self.controller.name
    140         self.description_label.text = self.description_text
    141 
    142     @property
    143     def name_label_align(self):
    144         text_width, _ = TextHeadline.MeasureTextSize(self.controller.name)
    145         if text_width > NAME_ALIGN_THRESHOLD:
    146             return uiconst.TOLEFT
    147         return uiconst.CENTER
    148 
    149     @property
    150     def description_text(self):
    151         return self.controller.description_for_selected_milestone
    152 
    153     def on_achievement_completed(self, achievement_id):
    154         if achievement_id == self.controller.achievement_entry.identifier:
    155             self.update()
    156 
    157     def on_achievement_progressed(self, achievement_id, achievement_state):
    158         if achievement_id == self.controller.achievement_entry.identifier:
    159             self.update()
    160 
    161     def on_achievement_reset(self, achievement_id):
    162         if achievement_id == self.controller.achievement_entry.identifier:
    163             self.update()
    164 
    165     def on_achievement_reset_all(self):
    166         self.update()
    167 
    168     def on_name_label_click(self, *args):
    169         self.on_name_click()