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

default.py (8028B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\window\header\default.py
      2 from carbonui import uiconst
      3 from carbonui.primitives.container import Container
      4 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      5 from carbonui.primitives.sprite import Sprite
      6 from carbonui.text.color import TextColor
      7 from carbonui.uianimations import animations
      8 from carbonui.window.header.base import WindowHeaderBase
      9 from carbonui.window.header.caption import WindowCaption
     10 from carbonui.window.settings import WindowMarginMode
     11 
     12 class DefaultWindowHeader(WindowHeaderBase, Container):
     13     ICON_SIZE_COMPACT = 24
     14     ICON_SIZE_NORMAL = 32
     15     ICON_OFFSET_COMPACT = -2
     16     ICON_OFFSET_NORMAL = -4
     17     HAS_SUFFICIENT_BOTTOM_PADDING = True
     18 
     19     def __init__(self, show_caption = True):
     20         self._show_caption = show_caption
     21         self._caption_label = None
     22         super(DefaultWindowHeader, self).__init__()
     23 
     24     @staticmethod
     25     def caption_font_size(window):
     26         if window.collapsed or window.compact or window.margin_mode == WindowMarginMode.COMPACT:
     27             return 12
     28         else:
     29             return 18
     30 
     31     @staticmethod
     32     def caption_color(window):
     33         if window.active:
     34             return TextColor.HIGHLIGHT
     35         elif window.IsLightBackgroundEnabled():
     36             return TextColor.NORMAL
     37         else:
     38             return TextColor.SECONDARY
     39 
     40     @staticmethod
     41     def desired_height(window):
     42         if window.stacked:
     43             return 0
     44         elif window.collapsed or window.compact or window.margin_mode == WindowMarginMode.COMPACT:
     45             return WindowHeaderBase.COLLAPSED_HEIGHT
     46         else:
     47             return 48
     48 
     49     @staticmethod
     50     def desired_padding(window):
     51         left, right = window.header_inset
     52         return (left,
     53          0,
     54          right,
     55          0)
     56 
     57     @staticmethod
     58     def should_show_icon(window):
     59         return not window.compact and not window.collapsed and getattr(window, 'hasWindowIcon', True)
     60 
     61     @property
     62     def extra_content(self):
     63         return self._extra_content
     64 
     65     @property
     66     def show_caption(self):
     67         return self._show_caption
     68 
     69     @show_caption.setter
     70     def show_caption(self, value):
     71         if self._show_caption != value:
     72             self._show_caption = value
     73             window = self.window
     74             if window is not None:
     75                 self._update_caption(window)
     76 
     77     def mount(self, window):
     78         super(DefaultWindowHeader, self).mount(window)
     79         self._layout(window)
     80         self.height = self.desired_height(window)
     81         self._update_caption(window)
     82         self._update_caption_icon_display(window)
     83         window.on_caption_changed.connect(self._on_caption_changed)
     84         window.on_collapsed_changed.connect(self._on_collapsed_changed)
     85         window.on_compact_mode_changed.connect(self._on_compact_mode_changed)
     86         window.on_header_inset_changed.connect(self._on_header_inset_changed)
     87         window.on_icon_changed.connect(self._on_icon_changed)
     88         window.on_margin_mode_changed.connect(self._on_margin_mode_changed)
     89         window.on_stacked_changed.connect(self._on_stacked_changed)
     90 
     91     def unmount(self, window):
     92         window.on_caption_changed.disconnect(self._on_caption_changed)
     93         window.on_collapsed_changed.disconnect(self._on_collapsed_changed)
     94         window.on_compact_mode_changed.disconnect(self._on_compact_mode_changed)
     95         window.on_header_inset_changed.disconnect(self._on_header_inset_changed)
     96         window.on_icon_changed.disconnect(self._on_icon_changed)
     97         window.on_margin_mode_changed.disconnect(self._on_margin_mode_changed)
     98         window.on_stacked_changed.disconnect(self._on_stacked_changed)
     99 
    100     @classmethod
    101     def _get_icon_offset(cls, window):
    102         if window.collapsed or window.compact or window.margin_mode == WindowMarginMode.COMPACT:
    103             return cls.ICON_OFFSET_COMPACT
    104         else:
    105             return cls.ICON_OFFSET_NORMAL
    106 
    107     @classmethod
    108     def _get_icon_size(cls, window):
    109         if window.collapsed or window.compact or window.margin_mode == WindowMarginMode.COMPACT:
    110             return cls.ICON_SIZE_COMPACT
    111         else:
    112             return cls.ICON_SIZE_NORMAL
    113 
    114     def _on_caption_changed(self, window):
    115         self._update_caption(window)
    116 
    117     def _on_collapsed_changed(self, window):
    118         self._update_caption(window, animate=True)
    119         self._update_caption_icon_display(window)
    120         self._update_height(window)
    121         self._update_icon_size(window)
    122 
    123     def _on_compact_mode_changed(self, window):
    124         self._update_caption(window, animate=True)
    125         self._update_caption_icon_display(window)
    126         self._update_height(window)
    127         self._update_icon_size(window)
    128 
    129     def _on_header_inset_changed(self, window):
    130         self._main_cont.padding = self.desired_padding(window)
    131 
    132     def _on_margin_mode_changed(self, window):
    133         self._update_caption(window)
    134         self._update_height(window)
    135         self._update_icon_size(window)
    136         self._update_icon_size(window)
    137 
    138     def _on_stacked_changed(self, window):
    139         self._update_height(window)
    140 
    141     def _on_icon_changed(self, window):
    142         self._caption_icon.display = window.icon is not None
    143         self._caption_icon.texturePath = window.icon
    144 
    145     def _update_caption(self, window, animate = False):
    146         if self._show_caption or window.collapsed:
    147             if self._caption_label is None:
    148                 self._create_caption_label(window)
    149             else:
    150                 self._caption_label.font_size = self.caption_font_size(window)
    151                 caption_color = self.caption_color(window)
    152                 if animate:
    153                     animations.SpColorMorphTo(self._caption_label, startColor=self._caption_label.color, endColor=caption_color, duration=uiconst.TIME_ENTRY)
    154                 else:
    155                     self._caption_label.color = caption_color
    156                 self._caption_label.text = window.caption
    157                 self._caption_label.padLeft = 8 if self.should_show_icon(window) else 0
    158         elif not self._show_caption:
    159             if self._caption_label is not None:
    160                 self._caption_label.Close()
    161                 self._caption_label = None
    162 
    163     def _update_caption_icon_display(self, window):
    164         self._caption_icon.parent.display = self.should_show_icon(window)
    165 
    166     def _update_height(self, window):
    167         self.height = self.desired_height(window)
    168 
    169     def _update_icon_size(self, window):
    170         size = self._get_icon_size(window)
    171         self._caption_icon.width = size
    172         self._caption_icon.height = size
    173         self._caption_icon.parent.left = self._get_icon_offset(window)
    174         self.minWidth = size
    175         self.minHeight = size
    176 
    177     def _create_caption_label(self, window):
    178         left_pad = 8 if self.should_show_icon(window) else 0
    179         self._caption_label = WindowCaption(parent=self._main_cont, text=window.caption, font_size=self.caption_font_size(window), color=self.caption_color(window), padding=(left_pad,
    180          0,
    181          8,
    182          0))
    183 
    184     def _layout(self, window):
    185         left_inset, right_inset = window.header_inset
    186         self._main_cont = Container(name='main', parent=self, align=uiconst.TOALL, padding=(left_inset,
    187          0,
    188          right_inset,
    189          0))
    190         self._create_icon(window)
    191         self._update_caption_icon_display(window)
    192         self._create_caption_label(window)
    193         self._extra_content = Container(name='extra', parent=self._main_cont, align=uiconst.TOALL, clipChildren=True)
    194         icon_size = self._get_icon_size(window)
    195         self.minWidth = icon_size
    196         self.minHeight = icon_size
    197 
    198     def _create_icon(self, window):
    199         size = self._get_icon_size(window)
    200         self._caption_icon = Sprite(parent=ContainerAutoSize(name='icon', parent=self._main_cont, align=uiconst.TOLEFT, left=self._get_icon_offset(window)), align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED, width=size, height=size, texturePath=window.icon)