npcinteractionview.py (10313B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\agentinteraction\npcinteractionview.py 2 from carbonui.control.buttonIcon import ButtonIcon 3 from carbonui.uianimations import animations 4 import agentinteraction.constUI as paddingConst 5 from agentinteraction.rewardsview import RewardsView 6 from agentinteraction.textutils import fix_text 7 from agentinteraction.warningpanel import CollateralPanel, DisclaimerPanel, GrantedItemsPanel, ShipRequirementsPanel 8 from carbonui import uiconst 9 from carbonui.control.scrollContainer import ScrollContainer 10 from carbonui.primitives.container import Container 11 from carbonui.primitives.containerAutoSize import ContainerAutoSize 12 from carbonui.primitives.line import Line 13 from carbonui.util.color import Color 14 from eve.client.script.ui.control import eveLabel 15 from carbonui.button.group import ButtonGroup, ButtonSizeMode 16 from eve.client.script.ui.control.eveLabel import Label 17 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel 18 from localization import GetByMessageID 19 from carbonui.primitives.collapsibleContainer import CollapsibleContainer 20 LINE_HEIGHT = 1 21 TOP_LINE_PADDING_BOTTOM = 8 22 LORE_HEIGHT = 120 23 SCROLLBAR_COLOR = Color.GRAY5 24 LORE_SCROLLBAR_PADDING = 35 25 BUTTON_PADDING_TOP = 30 26 BUTTON_PADDING_BOTTOM = 2 27 28 class NpcInteractionView(Container): 29 default_name = 'NpcInteractionView' 30 31 def __init__(self, npc_character, inner_padding = (0, 0, 0, 0), **kwargs): 32 self._inner_padding = inner_padding 33 self.npc_character = npc_character 34 self.subcontainer_lore = None 35 self.lore_autosize = None 36 self.lore_text = '' 37 self.scroll = None 38 self.end_line = None 39 super(NpcInteractionView, self).__init__(**kwargs) 40 self._build_content() 41 42 @property 43 def inner_padding(self): 44 return self._inner_padding 45 46 @inner_padding.setter 47 def inner_padding(self, value): 48 if isinstance(value, (int, float)): 49 value = (value, 50 value, 51 value, 52 value) 53 if self._inner_padding != value: 54 self._inner_padding = value 55 self._update_scroll_padding() 56 self._update_buttons_padding() 57 58 def _build_content(self): 59 self._build_loading_wheel() 60 self.content_cont = Container(name='content_cont', parent=self) 61 self._build_buttons() 62 self._build_end_line() 63 self.scroll = ScrollContainer(name='scroll', parent=self.content_cont, align=uiconst.TOALL, scrollBarColor=SCROLLBAR_COLOR, scrollBarPadding=10, innerPadding=(0, 0, 0, 0), padding=self._get_scroll_padding()) 64 self.scroll.onSizeChangeSignal.connect(self.on_scroll_size_changed) 65 self.inner_scroll_cont = ContainerAutoSize(name='inner_scroll_cont', parent=self.scroll, align=uiconst.TOTOP) 66 self._build_title_cont() 67 self._build_title() 68 self._build_top_line() 69 self._build_lore() 70 self._build_objectives() 71 self._build_ship_requirements_warning() 72 self._build_disclaimer() 73 self._build_granted_items() 74 self._build_collateral() 75 self._build_rewards() 76 77 def _get_scroll_padding(self): 78 pad_left, pad_top, pad_right, _ = self.inner_padding 79 return (pad_left, 80 pad_top, 81 pad_right, 82 0) 83 84 def _update_scroll_padding(self): 85 if self.scroll: 86 self.scroll.padding = self._get_scroll_padding() 87 88 def _build_loading_wheel(self): 89 self.loading_wheel = LoadingWheel(name='loading_wheel', parent=self, align=uiconst.CENTER, state=uiconst.UI_DISABLED) 90 self.loading_wheel.display = False 91 92 def _build_buttons(self): 93 self.buttonGroup = ButtonGroup(name='container_buttons', parent=self.content_cont, align=uiconst.TOBOTTOM, padding=self._get_buttons_padding(), button_size_mode=ButtonSizeMode.STRETCH) 94 95 def _get_buttons_padding(self): 96 pad_left, pad_top, pad_right, pad_bottom = self.inner_padding 97 return (pad_left, 98 pad_bottom, 99 pad_right, 100 pad_bottom) 101 102 def _update_buttons_padding(self): 103 if self.buttonGroup: 104 self.buttonGroup.padding = self._get_buttons_padding() 105 106 def _build_title_cont(self): 107 self.container_title = ContainerAutoSize(name='container_title', parent=self.inner_scroll_cont, align=uiconst.TOTOP, padding=(0, 108 0, 109 0, 110 paddingConst.PADDING_XSMALL), alignMode=uiconst.TOTOP) 111 112 def _build_title(self): 113 self.title = Label(name='label_title', parent=self.container_title, align=uiconst.TOTOP, fontsize=paddingConst.HEADER_SIZE_BIG, color=Color.WHITE) 114 115 def _build_top_line(self): 116 container_top_line = Container(name='container_top_line', parent=self.inner_scroll_cont, align=uiconst.TOTOP, height=LINE_HEIGHT, padding=(0, 117 0, 118 0, 119 TOP_LINE_PADDING_BOTTOM)) 120 Line(name='top_line', parent=container_top_line, align=uiconst.TOALL, weight=LINE_HEIGHT) 121 122 def _build_lore(self): 123 self.container_lore = ContainerAutoSize(name='container_lore', parent=self.inner_scroll_cont, align=uiconst.TOTOP) 124 self._build_lore_content() 125 126 def _build_lore_content(self): 127 if not self.lore_autosize or self.lore_autosize.destroyed: 128 self.lore_autosize = CollapsibleContainer(name='lore_autosize', parent=self.container_lore, align=uiconst.TOTOP, clipChildren=True) 129 self.lore_autosize.set_text(self.lore_text) 130 131 def _build_objectives(self): 132 self.container_objectives = Container(name='container_objectives', parent=self.inner_scroll_cont, align=uiconst.TOTOP, height=100) 133 134 def _build_ship_requirements_warning(self): 135 self.container_ship_requirements_warning = ShipRequirementsPanel(name='container_ship_requirements_warning', parent=self.inner_scroll_cont, align=uiconst.TOTOP) 136 self.container_ship_requirements_warning.Hide() 137 138 def _build_disclaimer(self): 139 self.container_disclaimer = DisclaimerPanel(name='container_disclaimer', parent=self.inner_scroll_cont, align=uiconst.TOTOP) 140 self.container_disclaimer.Hide() 141 142 def _build_granted_items(self): 143 self.container_granted_items = GrantedItemsPanel(name='container_granted_items', parent=self.inner_scroll_cont, align=uiconst.TOTOP) 144 self.container_granted_items.Hide() 145 146 def _build_collateral(self): 147 self.container_collateral = CollateralPanel(name='container_collateral', parent=self.inner_scroll_cont, align=uiconst.TOTOP) 148 self.container_collateral.Hide() 149 150 def _build_rewards(self): 151 self.container_rewards = RewardsView(name='container_rewards', parent=self.inner_scroll_cont, align=uiconst.TOTOP, padding=(0, 152 paddingConst.PADDING_SMALL, 153 0, 154 0)) 155 self.container_rewards.Hide() 156 157 def _build_end_line(self): 158 self.end_line = Line(parent=self.content_cont, align=uiconst.TOBOTTOM_NOPUSH, top=-1) 159 160 def update_granted_items(self, items): 161 self.container_granted_items.update_items(items) 162 if items: 163 self.container_granted_items.Show() 164 else: 165 self.container_granted_items.Hide() 166 167 def update_normal_rewards(self, items): 168 self.container_rewards.update_normal_rewards(items) 169 if items: 170 self.container_rewards.Show() 171 else: 172 self.container_rewards.Hide() 173 174 def update_bonus_rewards(self, items): 175 self.container_rewards.update_bonus_rewards(items) 176 if items: 177 self.container_rewards.Show() 178 else: 179 self.container_rewards.Hide() 180 181 def clear_rewards(self): 182 self.container_rewards.clear_rewards() 183 self.container_rewards.Hide() 184 185 def update_collateral(self, items): 186 self.container_collateral.update_items(items) 187 if items: 188 self.container_collateral.Show() 189 else: 190 self.container_collateral.Hide() 191 192 def update_disclaimer(self, disclaimer): 193 if disclaimer: 194 self.container_disclaimer.Show() 195 self.container_disclaimer.set_text(disclaimer) 196 else: 197 self.container_disclaimer.Hide() 198 199 def update_ship_requirements(self, should_show): 200 if should_show: 201 self.container_ship_requirements_warning.Show() 202 else: 203 self.container_ship_requirements_warning.Hide() 204 205 def update_ship_requirements_info(self, dungeon_id = None): 206 self.container_ship_requirements_warning.set_restrictions_info(dungeon_id, in_valid_ship=False, ship_window_header=self.title.text) 207 208 def update_title(self, title): 209 if title: 210 self.title.SetText(GetByMessageID(title)) 211 self.container_title.Show() 212 else: 213 self.container_title.Hide() 214 215 def update_lore(self, lore, show_all = False): 216 self.lore_text = fix_text(lore) 217 self.lore_autosize.set_text(self.lore_text, show_all) 218 219 def update_buttons(self, actions, controller): 220 self.buttonGroup.FlushButtons() 221 for label, func, kwargs in reversed(actions): 222 self.buttonGroup.AddButton(label, func, **(kwargs or {})) 223 224 def update_loading_state(self, is_loading): 225 if is_loading: 226 self.loading_wheel.display = True 227 self.content_cont.opacity = 0 228 else: 229 self.loading_wheel.display = False 230 animations.FadeIn(self.content_cont) 231 232 def disable_buttons(self): 233 for button in self.buttonGroup.buttons: 234 button.Disable() 235 236 def enable_buttons(self): 237 for button in self.buttonGroup.buttons: 238 button.Enable() 239 240 def show_objectives(self): 241 self.container_objectives.Show() 242 243 def hide_objectives(self): 244 self.container_objectives.Hide() 245 246 def on_scroll_size_changed(self, *args): 247 self.update_end_line() 248 249 def update_end_line(self): 250 if not self.scroll or not self.end_line: 251 return 252 if self.scroll.IsVerticalScrollBarVisible(): 253 self.end_line.Show() 254 else: 255 self.end_line.Hide() 256 257 def Close(self): 258 if self.scroll: 259 self.scroll.onSizeChangeSignal.disconnect(self.on_scroll_size_changed) 260 super(NpcInteractionView, self).Close()