componentBrowser.py (8066B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\ship\pages\store\componentBrowser.py 2 import eveicon 3 from carbonui import Align 4 from carbonui.button.menu import MenuButtonIcon 5 from carbonui.control.contextMenu.menuData import MenuData 6 from carbonui.control.scrollContainer import ScrollContainer 7 from carbonui.primitives.container import Container 8 from carbonui.uianimations import animations 9 from cosmetics.client.ships.ship_skin_signals import on_component_listing_cache_invalidated 10 from cosmetics.client.ships.skins.live_data.section_controller import StoreNanocoatingComponentsSection, StoreMetallicComponentsSection, StorePatternComponentsSection 11 from cosmetics.common.ships.skins.static_data.component_category import ComponentCategory 12 from cosmetics.common.ships.skins.static_data.component_finish import ComponentFinish 13 from cosmetics.common.ships.skins.util import ComponentListingOrder 14 from eve.client.script.ui.cosmetics.ship.controls.baseCardSectionContainer import BaseCardSectionContainer 15 from eve.client.script.ui.cosmetics.ship.pages.cards.componentListingCard import ComponentListingCard 16 from eve.client.script.ui.cosmetics.ship.pages.store import storeSignals, storeSettings 17 from eve.client.script.ui.cosmetics.ship.pages.store.storeSettings import components_sort_by_setting 18 from localization import GetByLabel 19 MAX_NUM_PER_PAGE = 20 20 21 class ComponentBrowser(ScrollContainer): 22 23 def __init__(self, **kw): 24 super(ComponentBrowser, self).__init__(**kw) 25 self.is_loaded = False 26 27 def LoadPanel(self, category = None): 28 self.reconstruct_layout() 29 self.Flush() 30 if category == ComponentCategory.PATTERN: 31 ComponentStoreViewAllSectionContainer(name='materials_section', parent=self, align=Align.TOTOP, padTop=32, section_controller=StorePatternComponentsSection(MAX_NUM_PER_PAGE)) 32 elif category == ComponentCategory.MATERIAL: 33 NanocoatinComponentStoreViewAllSectionContainer(name='materials_section', parent=self, align=Align.TOTOP, padTop=32, section_controller=StoreNanocoatingComponentsSection(MAX_NUM_PER_PAGE)) 34 elif category == ComponentCategory.METALLIC: 35 ComponentStoreViewAllSectionContainer(name='materials_section', parent=self, align=Align.TOTOP, padTop=32, section_controller=StoreMetallicComponentsSection(MAX_NUM_PER_PAGE)) 36 else: 37 self.construct_landing_page() 38 self.appear() 39 40 def reconstruct_layout(self): 41 self.Flush() 42 43 def construct_landing_page(self): 44 ComponentStoreSectionContainer(name='materials_section', parent=self, align=Align.TOTOP, section_controller=StoreNanocoatingComponentsSection(num_per_page=None), single_row=True, padTop=32) 45 ComponentStoreSectionContainer(name='metallics_section', parent=self, align=Align.TOTOP, section_controller=StoreMetallicComponentsSection(num_per_page=None), single_row=True, padTop=48, max_entries=5) 46 ComponentStoreSectionContainer(name='pattern_section', parent=self, align=Align.TOTOP, section_controller=StorePatternComponentsSection(num_per_page=None), single_row=True, padTop=48, max_entries=5) 47 48 def appear(self): 49 animations.FadeTo(self, 0.0, 1.0, duration=0.3) 50 51 52 class ComponentStoreSectionContainer(BaseCardSectionContainer): 53 54 def on_sort_by_setting(self, *args): 55 self.reconstruct_cards() 56 57 def connect_signals(self): 58 super(ComponentStoreSectionContainer, self).connect_signals() 59 components_sort_by_setting.on_change.connect(self.on_sort_by_setting) 60 storeSignals.on_component_listing_selected.connect(self.on_skin_license_selected) 61 on_component_listing_cache_invalidated.connect(self._on_component_listing_cache_invalidated) 62 63 def disconnect_signals(self): 64 super(ComponentStoreSectionContainer, self).disconnect_signals() 65 components_sort_by_setting.on_change.disconnect(self.on_sort_by_setting) 66 storeSignals.on_component_listing_selected.disconnect(self.on_skin_license_selected) 67 on_component_listing_cache_invalidated.disconnect(self._on_component_listing_cache_invalidated) 68 69 def construct_card(self, listing): 70 return ComponentListingCard(parent=self.content, listing=listing) 71 72 def on_skin_license_selected(self, listing): 73 for card in self.cards: 74 if card.listing != listing: 75 card.is_selected = False 76 77 def _on_component_listing_cache_invalidated(self, *args): 78 self.update() 79 80 81 class SortByMenuButtonIcon(MenuButtonIcon): 82 hint = GetByLabel('UI/Common/SortBy') 83 default_texturePath = eveicon.bars_sort_ascending 84 85 def GetMenu(self): 86 m = MenuData() 87 m.AddCaption(self.hint) 88 m.AddRadioButton(GetByLabel('UI/Common/Name'), (ComponentListingOrder.NAME, False), components_sort_by_setting) 89 m.AddRadioButton(GetByLabel('UI/Inventory/NameReversed'), (ComponentListingOrder.NAME, True), components_sort_by_setting) 90 m.AddSeparator() 91 m.AddRadioButton(GetByLabel('UI/Market/Marketbase/Price'), (ComponentListingOrder.PRICE, False), components_sort_by_setting) 92 m.AddRadioButton(GetByLabel('UI/Market/Marketbase/PriceReversed'), (ComponentListingOrder.PRICE, True), components_sort_by_setting) 93 m.AddSeparator() 94 m.AddRadioButton(GetByLabel('UI/Common/ColorShade'), (ComponentListingOrder.COLOR_SHADE, False), components_sort_by_setting) 95 m.AddRadioButton(GetByLabel('UI/Common/ColorShadeReversed'), (ComponentListingOrder.COLOR_SHADE, True), components_sort_by_setting) 96 return m 97 98 99 class ComponentStoreViewAllSectionContainer(ComponentStoreSectionContainer): 100 101 def construct_filter_and_sorting(self): 102 SortByMenuButtonIcon(parent=self.filter_and_sorting_cont, align=Align.CENTERLEFT) 103 104 def construct_pagination_container(self): 105 self.pagination_container = Container(name='pagination_container', parent=self, align=Align.TOTOP, height=32) 106 107 108 class NanocoatingFilterMenuButton(MenuButtonIcon): 109 hint = GetByLabel('UI/Common/Filter') 110 default_texturePath = eveicon.filter 111 112 def GetMenu(self): 113 m = MenuData() 114 m.AddCaption(GetByLabel('UI/Personalization/ShipSkins/Finish')) 115 m.AddRadioButton(GetByLabel('UI/Common/Any'), None, storeSettings.nanocoating_finish_filter_setting) 116 m.AddRadioButton(GetByLabel('UI/Personalization/ShipSkins/SKINR/FinishMatte'), ComponentFinish.MATTE, storeSettings.nanocoating_finish_filter_setting) 117 m.AddRadioButton(GetByLabel('UI/Personalization/ShipSkins/SKINR/FinishSatin'), ComponentFinish.SATIN, storeSettings.nanocoating_finish_filter_setting) 118 m.AddRadioButton(GetByLabel('UI/Personalization/ShipSkins/SKINR/FinishGloss'), ComponentFinish.GLOSS, storeSettings.nanocoating_finish_filter_setting) 119 return m 120 121 122 class NanocoatinComponentStoreViewAllSectionContainer(ComponentStoreViewAllSectionContainer): 123 124 def __init__(self, section_controller, single_row = False, **kw): 125 super(NanocoatinComponentStoreViewAllSectionContainer, self).__init__(section_controller, single_row, **kw) 126 storeSettings.nanocoating_finish_filter_setting.set(None) 127 128 def __del__(self): 129 storeSettings.nanocoating_finish_filter_setting.set(None) 130 131 def connect_signals(self): 132 super(NanocoatinComponentStoreViewAllSectionContainer, self).connect_signals() 133 storeSettings.nanocoating_finish_filter_setting.on_change.connect(self.on_finish_setting_changed) 134 135 def disconnect_signals(self): 136 super(NanocoatinComponentStoreViewAllSectionContainer, self).disconnect_signals() 137 storeSettings.nanocoating_finish_filter_setting.on_change.disconnect(self.on_finish_setting_changed) 138 139 def on_finish_setting_changed(self, finish): 140 self.update() 141 142 def construct_filter_and_sorting(self): 143 super(NanocoatinComponentStoreViewAllSectionContainer, self).construct_filter_and_sorting() 144 NanocoatingFilterMenuButton(parent=self.filter_and_sorting_cont, align=Align.CENTERLEFT, left=20)