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

studioHomePage.py (8339B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\ship\pages\homepage\studioHomePage.py
      2 from carbon.client.script.environment.AudioUtil import PlaySound
      3 from carbonui import Align, AxisAlignment, Density, uiconst, ButtonVariant
      4 from carbonui.button.group import ButtonGroup, ButtonSizeMode
      5 from carbonui.control.button import Button
      6 from carbonui.primitives.container import Container
      7 from carbonui.control.scrollContainer import ScrollContainer
      8 from carbonui.uianimations import animations
      9 from carbonui.button.menu import MenuButtonIcon
     10 from carbonui.control.contextMenu.menuData import MenuData
     11 from cosmetics.client.ships.skins.live_data.section_controller import SequencingInProgressSection, SavedDesignsSection
     12 from cosmetics.common.ships.skins.util import SkinListingOrder
     13 from eve.client.script.ui.cosmetics.ship.const import ANIM_DURATION_LONG
     14 from eve.client.script.ui.cosmetics.ship.pages.homepage.savedDesignInfo import SavedDesignInfo
     15 from eve.client.script.ui.cosmetics.ship.pages.homepage.savedDesignsSection import SavedDesignsSectionContainer
     16 from eve.client.script.ui.cosmetics.ship.pages.homepage.sequencingInProgress import SequencingInProgressSectionContainer
     17 from eve.client.script.ui.cosmetics.ship.pages.homepage.sequencingJobInfo import SequencingJobInfo
     18 from eve.client.script.ui.cosmetics.ship.pages.cards.skinDesignCard import SkinDesignCard
     19 from eve.client.script.ui.cosmetics.ship.pages.studio import studioSignals
     20 from eve.client.script.ui.cosmetics.ship.const import SkinrPage
     21 from eve.client.script.ui.cosmetics.ship.pages.shipSKINRPageBase import ShipSKINRPageBase
     22 from eve.client.script.ui.cosmetics.ship.pages.homepage.savedDesignsSettings import designs_sort_by_setting
     23 from localization import GetByLabel
     24 from signals import Signal
     25 import eveicon
     26 MAX_NUM_PER_PAGE = 10
     27 
     28 class StudioHomePage(ShipSKINRPageBase):
     29     default_padding = (32, 128, 32, 32)
     30 
     31     def __init__(self, **kw):
     32         super(StudioHomePage, self).__init__(**kw)
     33         self.is_loaded = False
     34         self.on_create_new_design_btn = Signal('on_create_new_design_btn')
     35         self.connect_signals()
     36 
     37     def Close(self):
     38         try:
     39             self.disconnect_signals()
     40         finally:
     41             super(StudioHomePage, self).Close()
     42 
     43     def connect_signals(self):
     44         studioSignals.on_saved_design_selected.connect(self.on_saved_design_selected)
     45         studioSignals.on_sequencing_job_selected.connect(self.on_sequencing_job_selected)
     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 
     51     def LoadPanel(self, section_id = None):
     52         self.opacity = 0.0
     53         if not self.is_loaded:
     54             self.is_loaded = True
     55             self.construct_layout()
     56         else:
     57             self.section_cont.Flush()
     58         if section_id is SkinrPage.STUDIO_SAVED_DESIGNS:
     59             self.construct_view_all_saved_designs_section()
     60             self.saved_designs_section.deselect_all_cards()
     61         else:
     62             self.construct_right_cont()
     63             self.left_cont.FlagForceUpdateAlignment()
     64             self.saved_designs_section.verify_cards()
     65             self.saved_designs_section.deselect_all_cards()
     66             self.sequencing_in_progress_section.verify_cards()
     67             self.sequencing_in_progress_section.deselect_all_cards()
     68             self.show_buttons()
     69         self.state = uiconst.UI_PICKCHILDREN
     70         animations.FadeTo(self, 0.0, 1.0, duration=0.3)
     71 
     72     def UnloadPanel(self):
     73         self.Disable()
     74         animations.FadeTo(self, self.opacity, 0.0, duration=uiconst.TIME_EXIT, callback=self.Hide)
     75 
     76     def construct_layout(self):
     77         self.right_cont = Container(name='right_cont', parent=self, align=Align.TORIGHT_PROP, width=0.55, maxWidth=920)
     78         self.left_cont = Container(name='left_cont', parent=self, padding=(0, 44, 64, 16))
     79         self.section_cont = ScrollContainer(parent=self.right_cont, align=Align.TOALL)
     80         self.construct_left_cont()
     81 
     82     def construct_right_cont(self):
     83         self.sequencing_in_progress_section = SequencingInProgressSectionContainer(parent=self.section_cont, align=Align.TOTOP, section_controller=SequencingInProgressSection(), single_row=True)
     84         self.saved_designs_section = SavedDesignsSectionContainer(name='saved_designs_section', parent=self.section_cont, align=Align.TOTOP, section_controller=SavedDesignsSection(), single_row=True, padTop=32)
     85 
     86     def construct_left_cont(self):
     87         self.button_group = ButtonGroup(parent=self.left_cont, align=Align.BOTTOMRIGHT, button_alignment=AxisAlignment.END, density=Density.EXPANDED, button_size_mode=ButtonSizeMode.DYNAMIC)
     88         self.button_group.add_button(Button(label=GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/CreateNewDesign'), func=self._on_create_new_design_btn, variant=ButtonVariant.PRIMARY))
     89         self.saved_design_info = SavedDesignInfo(name='saved_design_info', parent=self.left_cont)
     90         self.sequencing_job_info = SequencingJobInfo(name='sequencing_job_info', parent=self.left_cont)
     91 
     92     def construct_view_all_saved_designs_section(self):
     93         ViewAllSavedDesignsSectionContainer(parent=self.section_cont, align=Align.TOTOP, padTop=32, section_controller=SavedDesignsSection(num_per_page=MAX_NUM_PER_PAGE))
     94 
     95     def _on_create_new_design_btn(self, *args):
     96         PlaySound('nanocoating_button_start_designing_play')
     97         return self.on_create_new_design_btn()
     98 
     99     def on_saved_design_selected(self, saved_skin_design_id, skin_design):
    100         self.sequencing_in_progress_section.deselect_all_cards()
    101         if saved_skin_design_id or skin_design:
    102             self.hide_buttons()
    103         else:
    104             self.show_buttons()
    105 
    106     def on_sequencing_job_selected(self, sequencing_job):
    107         self.saved_designs_section.deselect_all_cards()
    108         if sequencing_job:
    109             self.hide_buttons()
    110         else:
    111             self.show_buttons()
    112 
    113     def hide_buttons(self):
    114         self.button_group.state = uiconst.UI_DISABLED
    115         animations.FadeTo(self.button_group, self.button_group.opacity, 0.0, ANIM_DURATION_LONG)
    116 
    117     def show_buttons(self):
    118         self.button_group.state = uiconst.UI_PICKCHILDREN
    119         animations.FadeTo(self.button_group, self.button_group.opacity, 1.0, 0.5, timeOffset=ANIM_DURATION_LONG)
    120 
    121 
    122 class BaseViewAllSkinsSectionContainer(SavedDesignsSectionContainer):
    123 
    124     def __init__(self, section_controller, max_entries = None, **kw):
    125         super(BaseViewAllSkinsSectionContainer, self).__init__(section_controller, max_entries, **kw)
    126 
    127     def connect_signals(self):
    128         super(BaseViewAllSkinsSectionContainer, self).connect_signals()
    129         designs_sort_by_setting.on_change.connect(self.on_sort_by_setting)
    130 
    131     def disconnect_signals(self):
    132         super(BaseViewAllSkinsSectionContainer, self).disconnect_signals()
    133         designs_sort_by_setting.on_change.disconnect(self.on_sort_by_setting)
    134 
    135     def on_sort_by_setting(self, *args):
    136         self.update()
    137 
    138     def construct_pagination_container(self):
    139         self.pagination_container = Container(name='pagination_container', parent=self, align=Align.TOTOP, height=32)
    140 
    141     def construct_filter_and_sorting(self):
    142         SortByMenuButtonIcon(parent=self.filter_and_sorting_cont, align=Align.CENTERLEFT)
    143 
    144 
    145 class ViewAllSavedDesignsSectionContainer(BaseViewAllSkinsSectionContainer):
    146 
    147     def construct_card(self, card_controller):
    148         saved_skin_design_id, skin_design = card_controller
    149         card = SkinDesignCard(name='card_{design_id}'.format(design_id=saved_skin_design_id), parent=self.content, saved_skin_design_id=saved_skin_design_id, skin_design=skin_design)
    150         card.on_click.connect(self.on_card_clicked)
    151         return card
    152 
    153 
    154 class SortByMenuButtonIcon(MenuButtonIcon):
    155     hint = GetByLabel('UI/Common/SortBy')
    156     default_texturePath = eveicon.bars_sort_ascending
    157 
    158     def GetMenu(self):
    159         m = MenuData()
    160         m.AddCaption(self.hint)
    161         m.AddRadioButton(GetByLabel('UI/Common/Name'), (SkinListingOrder.NAME, False), designs_sort_by_setting)
    162         m.AddRadioButton(GetByLabel('UI/Inventory/NameReversed'), (SkinListingOrder.NAME, True), designs_sort_by_setting)
    163         return m