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

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)