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)