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

savedDesignInfo.py (8507B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\ship\pages\homepage\savedDesignInfo.py
      2 import blue
      3 from carbonui import Align, AxisAlignment, ButtonStyle, Density, uiconst, ButtonVariant
      4 from carbonui import TextAlign, TextColor
      5 from carbonui.text.styles import TextHeadline, TextBody
      6 from carbonui.button.group import ButtonGroup, ButtonSizeMode
      7 from carbonui.control.button import Button
      8 from carbonui.primitives.container import Container
      9 from carbonui.primitives.sprite import Sprite
     10 from carbonui.uianimations import animations
     11 from cosmetics.client.shipSkinDesignSvc import get_ship_skin_design_svc
     12 from cosmetics.client.ships.link.ship_skin_design_link_creation import create_link
     13 from cosmetics.client.ships.skins.live_data import current_skin_design
     14 from eve.client.script.ui import eveColor
     15 from eve.client.script.ui.cosmetics.ship.const import ANIM_DURATION_LONG, SkinrPage
     16 from eve.client.script.ui.cosmetics.ship.controls.shipName import ShipName
     17 from eve.client.script.ui.cosmetics.ship.pages import current_page
     18 from eve.client.script.ui.cosmetics.ship.pages.studio import studioSignals
     19 from eve.client.script.ui.cosmetics.ship.pages.studio.skinDesignDragData import SkinDesignDragData
     20 from eve.client.script.ui.cosmetics.ship.pages.studio.studioUtil import SHARE_BUTTON_ANALYTIC_ID
     21 from localization import GetByLabel
     22 from player_messaging.client.ui_message import message_player, prompt_player_fsd_dialog
     23 from publicGateway.grpc.exceptions import GenericException
     24 from stackless_response_router.exceptions import TimeoutException
     25 
     26 class SavedDesignInfo(Container):
     27     default_opacity = 0.0
     28 
     29     def __init__(self, *args, **kwargs):
     30         super(SavedDesignInfo, self).__init__(*args, **kwargs)
     31         self.saved_skin_design_id = None
     32         self.skin_design = None
     33         self.construct_layout()
     34         self.connect_signals()
     35 
     36     def Close(self):
     37         try:
     38             self.disconnect_signals()
     39         finally:
     40             super(SavedDesignInfo, self).Close()
     41 
     42     def connect_signals(self):
     43         studioSignals.on_saved_design_selected.connect(self.on_saved_design_selected)
     44         studioSignals.on_sequencing_job_selected.connect(self.on_sequencing_job_selected)
     45         studioSignals.on_page_opened.connect(self.on_page_opened)
     46 
     47     def disconnect_signals(self):
     48         studioSignals.on_saved_design_selected.disconnect(self.on_saved_design_selected)
     49         studioSignals.on_sequencing_job_selected.disconnect(self.on_sequencing_job_selected)
     50         studioSignals.on_page_opened.disconnect(self.on_page_opened)
     51 
     52     def construct_layout(self):
     53         self.construct_buttons()
     54         self.construct_tier_indicator()
     55         self.construct_name_and_line()
     56         self.construct_ship_name()
     57 
     58     def construct_ship_name(self):
     59         self.ship_name = ShipName(name='ship_name', parent=self, align=Align.CENTERTOP)
     60 
     61     def construct_name_and_line(self):
     62         self.skin_line_label = TextBody(name='skin_line_label', parent=self, align=Align.TOBOTTOM, textAlign=TextAlign.CENTER)
     63         self.skin_name_label = TextHeadline(name='skin_name_label', parent=self, align=Align.TOBOTTOM, textAlign=TextAlign.CENTER, color=TextColor.HIGHLIGHT)
     64 
     65     def construct_tier_indicator(self):
     66         self.tier_container = Container(name='tier_container', parent=self, align=Align.TOBOTTOM, width=336, height=58, padding=(0, 8, 0, 32))
     67         self.tier_label = TextHeadline(name='tier_label', parent=self.tier_container, align=Align.TOTOP_NOPUSH, textAlign=TextAlign.CENTER, color=eveColor.BLACK, shadowOffset=(0, 0), bold=True, padTop=14)
     68         self.tier_background = Sprite(name='tier_background', parent=self.tier_container, align=Align.CENTERTOP, state=uiconst.UI_DISABLED, width=336, height=58)
     69 
     70     def get_skin_tier_level(self):
     71         if self.skin_design:
     72             return self.skin_design.tier_level
     73         return 1
     74 
     75     def get_skin_tier_texture(self):
     76         tier_level = self.get_skin_tier_level()
     77         return 'res:/UI/Texture/classes/Cosmetics/Ship/cards/tier/tier_{level}.png'.format(level=tier_level)
     78 
     79     def construct_buttons(self):
     80         self.button_group = ButtonGroup(name='button_group', parent=self, align=Align.TOBOTTOM, button_alignment=AxisAlignment.END, density=Density.EXPANDED, button_size_mode=ButtonSizeMode.DYNAMIC, padTop=32)
     81         self.share_btn = Button(texturePath='res:/UI/Texture/classes/HyperNet/hyperlink_icon.png', hint=GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/ShareDesign'), func=self.on_share_button_click, iconSize=28)
     82         self.share_btn.underlay.opacity = 0.0
     83         self.share_btn.MakeDragObject()
     84         self.share_btn.GetDragData = lambda : SkinDesignDragData(self.skin_design, self.saved_skin_design_id)
     85         self.share_btn.analyticID = SHARE_BUTTON_ANALYTIC_ID
     86         self.button_group.add_button(self.share_btn)
     87         self.button_group.add_button(Button(label=GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/CreateNewDesign'), func=self.on_create_design_button, variant=ButtonVariant.PRIMARY))
     88         self.button_group.add_button(Button(label=GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/EditDesign'), func=self.on_edit_design_button))
     89         self.button_group.add_button(Button(label=GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/DeleteDesign'), style=ButtonStyle.DANGER, func=self.on_delete_design_button))
     90 
     91     def on_share_button_click(self, *args):
     92         try:
     93             link = create_link(character_id=self.skin_design.creator_character_id, design_id=self.saved_skin_design_id, name=self.skin_design.name)
     94             blue.clipboard.SetClipboardData(link)
     95             message_player(GetByLabel('UI/Personalization/ShipSkins/SKINR/LinkCopiedToClipboard'))
     96         except OSError as e:
     97             message_player(GetByLabel('UI/Personalization/ShipSkins/SKINR/LinkClipboardError'))
     98 
     99     def on_create_design_button(self, *args):
    100         if current_skin_design.get().has_fitted_components():
    101             ship_type_id = current_skin_design.get().ship_type_id
    102             current_skin_design.create_blank_design(ship_type_id)
    103         current_page.set_page_id(SkinrPage.STUDIO_DESIGNER)
    104 
    105     def on_edit_design_button(self, *args):
    106         current_page.set_page_id(SkinrPage.STUDIO_DESIGNER, page_args=self.saved_skin_design_id)
    107 
    108     def on_delete_design_button(self, *args):
    109         if prompt_player_fsd_dialog('DeleteDesign', {}, uiconst.YESNO) != uiconst.ID_YES:
    110             return
    111         try:
    112             get_ship_skin_design_svc().delete_design(self.saved_skin_design_id)
    113             current_skin_design.create_blank_design()
    114         except (GenericException, TimeoutException):
    115             message_player(GetByLabel('UI/Common/CannotConnectToServer'))
    116 
    117     def update(self):
    118         self.update_ship_name()
    119         self.update_name_labels()
    120         self.update_tier()
    121 
    122     def update_ship_name(self):
    123         self.ship_name.ship_type_id = self.skin_design.ship_type_id if self.skin_design else None
    124 
    125     def update_name_labels(self):
    126         self.skin_name_label.text = self.skin_design.name
    127         if self.skin_design.line_name:
    128             self.skin_line_label.display = True
    129             self.skin_line_label.text = self.skin_design.line_name
    130         else:
    131             self.skin_line_label.display = False
    132 
    133     def update_tier(self):
    134         self.tier_background.texturePath = self.get_skin_tier_texture()
    135         self.tier_label.text = '{tier}'.format(tier=self.get_skin_tier_level())
    136 
    137     def on_saved_design_selected(self, saved_skin_design_id, skin_design):
    138         self.saved_skin_design_id = saved_skin_design_id
    139         self.skin_design = skin_design
    140         if saved_skin_design_id is None or skin_design is None:
    141             self.fade_out()
    142         else:
    143             self.fade_out(callback=self.on_fade_out_complete)
    144 
    145     def on_sequencing_job_selected(self, *args):
    146         self.fade_out()
    147 
    148     def on_page_opened(self, page_id, page_args, last_page_id, animate = True):
    149         self.fade_out()
    150 
    151     def fade_out(self, callback = None):
    152         if callback is None:
    153             self.saved_skin_design_id = None
    154             self.skin_design = None
    155         self.state = uiconst.UI_DISABLED
    156         animations.FadeTo(self, self.opacity, 0.0, ANIM_DURATION_LONG, callback=callback)
    157 
    158     def fade_in(self):
    159         self.state = uiconst.UI_PICKCHILDREN
    160         animations.FadeTo(self, self.opacity, 1.0, 0.5)
    161 
    162     def on_fade_out_complete(self):
    163         self.update()
    164         self.fade_in()