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()