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

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)