skinNameEntry.py (6442B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\ship\pages\studio\skinNameEntry.py 2 import eveicon 3 from carbonui import Align, TextAlign, TextColor, uiconst 4 from carbonui.text.styles import TextHeadline, TextBody 5 from carbonui.control.singlelineedits.singleLineEditText import SingleLineEditText 6 from carbonui.primitives.container import Container 7 from carbonui.primitives.containerAutoSize import ContainerAutoSize 8 from carbonui.primitives.sprite import Sprite 9 from carbonui.uianimations import animations 10 from cosmetics.client.ships.skins.live_data import current_skin_design, current_skin_design_signals 11 from eve.client.script.ui.cosmetics.ship.pages.studio import studioSignals 12 from eve.client.script.ui.cosmetics.ship.pages.studio.skinNameDialogue import RenameSkinDialogue 13 from localization import GetByLabel 14 15 class SkinNameEntry(ContainerAutoSize): 16 default_align = Align.CENTER 17 default_state = uiconst.UI_NORMAL 18 default_width = 396 19 20 def __init__(self, *args, **kwargs): 21 super(SkinNameEntry, self).__init__(*args, **kwargs) 22 self._radius = 0.0 23 self.construct_layout() 24 self.connect_signals() 25 self.update_text() 26 27 def Close(self): 28 try: 29 self.disconnect_signals() 30 finally: 31 super(SkinNameEntry, self).Close() 32 33 def connect_signals(self): 34 current_skin_design_signals.on_design_reset.connect(self.update) 35 current_skin_design_signals.on_existing_design_loaded.connect(self.update) 36 current_skin_design_signals.on_name_changed.connect(self.update) 37 current_skin_design_signals.on_line_name_changed.connect(self.update) 38 current_skin_design_signals.on_ship_type_id_changed.connect(self.update) 39 current_skin_design_signals.on_slot_fitting_changed.connect(self.update) 40 current_skin_design_signals.on_snapshot_changed.connect(self.update) 41 studioSignals.on_scene_zoom.connect(self.on_scene_zoom) 42 43 def disconnect_signals(self): 44 current_skin_design_signals.on_design_reset.disconnect(self.update) 45 current_skin_design_signals.on_existing_design_loaded.disconnect(self.update) 46 current_skin_design_signals.on_name_changed.disconnect(self.update) 47 current_skin_design_signals.on_line_name_changed.disconnect(self.update) 48 current_skin_design_signals.on_ship_type_id_changed.disconnect(self.update) 49 current_skin_design_signals.on_slot_fitting_changed.disconnect(self.update) 50 current_skin_design_signals.on_snapshot_changed.disconnect(self.update) 51 studioSignals.on_scene_zoom.disconnect(self.on_scene_zoom) 52 53 def construct_layout(self): 54 self.skin_name_container = Container(name='name_container', parent=self, align=Align.TOTOP, height=30) 55 self.skin_name_label = TextHeadline(name='skin_name_label', parent=self.skin_name_container, align=Align.CENTER) 56 self.icon_container = Container(name='icon_container', parent=self.skin_name_container, align=Align.CENTER, width=16, height=30, opacity=0.0) 57 self.edit_icon = Sprite(name='edit_icon', parent=self.icon_container, align=Align.CENTER, state=uiconst.UI_DISABLED, texturePath=eveicon.edit, width=16, height=16) 58 self.skin_line_label = TextBody(name='skin_line_label', parent=self, align=Align.TOTOP, textAlign=TextAlign.CENTER) 59 self.skin_edit_container = Container(name='skin_edit_container', parent=self, align=Align.TOTOP, height=30) 60 hint_text = GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/SKINName') 61 text_width, _ = TextHeadline.MeasureTextSize(hint_text) 62 self.skin_edit_label = SkinNameEditText(name='skin_name_edit', parent=self.skin_edit_container, hintText=hint_text, width=text_width + 40) 63 self.update_text() 64 65 def update(self, *args): 66 self.update_text() 67 68 def update_text(self): 69 name_text = current_skin_design.get().name 70 has_name = bool(name_text) 71 self.skin_name_container.display = has_name 72 self.skin_line_label.display = has_name 73 self.skin_edit_container.display = not has_name 74 if has_name: 75 design_has_changes = current_skin_design.has_changes_from_snapshot() 76 self.skin_name_label.text = u'{name} *'.format(name=name_text) if design_has_changes else name_text 77 self.skin_line_label.text = current_skin_design.get().line_name 78 self.icon_container.left = -self.skin_name_label.width * 0.5 + -self.icon_container.width * 0.5 - 8 79 80 def on_scene_zoom(self, is_zoomed): 81 target_opacity = 0.0 if is_zoomed else 1.0 82 animations.FadeTo(self, self.opacity, target_opacity, duration=0.15) 83 84 def update_radial_position(self): 85 self.top = self._radius * 0.75 - self.height 86 87 @property 88 def radius(self): 89 return self._radius 90 91 @radius.setter 92 def radius(self, value): 93 self._radius = value 94 self.update_radial_position() 95 96 def OnMouseEnter(self, *args): 97 animations.FadeTo(self.icon_container, self.icon_container.opacity, 1.0, 0.25) 98 99 def OnMouseExit(self, *args): 100 animations.FadeTo(self.icon_container, self.icon_container.opacity, 0.0, 0.25) 101 102 def OnClick(self, *args): 103 if current_skin_design.get().name: 104 name = GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/RenameDesign') 105 else: 106 name = GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/SKINName') 107 dialogue = RenameSkinDialogue(window_name=name) 108 dialogue.ShowModal() 109 110 @property 111 def hint(self): 112 if current_skin_design.get().name: 113 return GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/RenameDesign') 114 else: 115 return GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/NameDesign') 116 117 118 class SkinNameEditText(SingleLineEditText): 119 default_align = Align.CENTER 120 default_state = uiconst.UI_DISABLED 121 default_icon = eveicon.edit 122 123 def ConstructLabels(self): 124 self.textLabel = TextHeadline(name='textLabel', parent=self._textClipperInner, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED, left=self.textLeftMargin, text='', maxLines=1) 125 self.hintLabel = TextHeadline(name='hintTextLabel', parent=self._textClipperInner, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED, left=self.textLeftMargin, text='', maxLines=1, color=TextColor.SECONDARY)