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

dashboard.py (10045B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\theatersOfWar\dashboard\dashboard.py
      2 import eveicon
      3 from campaigns.client.feature_flags import campaigns_enabled
      4 from campaigns.client.settings import campaign_animate_background
      5 from carbonui.control.sideNavigation import SideNavigationSplitView, SideNavigation
      6 from carbonui.control.window import Window
      7 from carbonui.primitives.container import Container
      8 from clientsettings.setting import CharSettingBool, CharSettingNumeric
      9 from eve.client.script.ui.control.treeData import TreeData
     10 from eve.client.script.ui.shared.theatersOfWar.campaigns.campaign_main_panel import CampaignMainPanel
     11 from eve.client.script.ui.shared.theatersOfWar.campaigns.panel_controller import CampaignPanelController
     12 from eve.client.script.ui.shared.theatersOfWar.dashboard.dashboardConst import ID_LANDING_PAGE, ID_FW, ID_INSURGENCY, ID_ENLISTMENT, ID_CAMPAIGNS, POINTER_NAME_BY_PANEL_ID
     13 from eve.client.script.ui.shared.theatersOfWar.dashboard.landingPanel import LandingPanel
     14 from eve.client.script.ui.shared.theatersOfWar.dashboard.enlistmentPanel import EnlistmentPanel
     15 from eve.client.script.ui.shared.theatersOfWar.dashboard.fwPanel import FwPanel
     16 from eve.client.script.ui.shared.theatersOfWar.dashboard.insurgencyPanel import InsurgencyPanel
     17 from eve.client.script.ui.shared.theatersOfWar.dashboard.signals import on_landing_page_widget_clicked
     18 from eve.client.script.ui.shared.theatersOfWar.dashboard.windowController import TheatersOfWarWindowController
     19 from eveexceptions import ExceptionEater
     20 from evewar.warText import GetByLabel
     21 is_expanded_setting = CharSettingBool('TheatersOfWar_SideNavigationIsExpanded', False)
     22 
     23 class TheatersOfWarDashboardWnd(Window):
     24     default_name = 'theatersOfWarDashboardWnd'
     25     default_windowID = 'theatersOfWarDashboardWnd'
     26     default_isStackable = False
     27     default_apply_content_padding = False
     28     default_iconNum = eveicon.theaters_of_war_product
     29     default_captionLabelPath = 'UI/TheatersOfWar/TheatersOfWarCaption'
     30     default_clipChildren = True
     31     default_width = 1600
     32     default_height = 880
     33     default_minSize = [1000, 853]
     34 
     35     def ApplyAttributes(self, attributes):
     36         self.panels_cont = None
     37         self.panels = {}
     38         self.navigation_tree_data = TreeData()
     39         self.window_controller = TheatersOfWarWindowController()
     40         super(TheatersOfWarDashboardWnd, self).ApplyAttributes(attributes)
     41         self.OnBack = self.window_controller.go_back
     42         self.OnForward = self.window_controller.go_forward
     43         self.construct_ui()
     44         selected_panel = attributes.get('selected_panel_id', self.window_controller.selected_panel_id)
     45         self.select_panel(selected_panel)
     46         self.ConnectSignals()
     47 
     48     def ConnectSignals(self):
     49         self.on_end_scale.connect(self.OnEndScale)
     50         self.on_start_scale.connect(self.OnStartScale)
     51         on_landing_page_widget_clicked.connect(self.select_panel)
     52         self.window_controller.on_page_changed.connect(self.on_panel_page_changed)
     53 
     54     def DisconnectSignals(self):
     55         self.on_end_scale.disconnect(self.OnEndScale)
     56         self.on_start_scale.disconnect(self.OnStartScale)
     57         on_landing_page_widget_clicked.disconnect(self.select_panel)
     58         self.window_controller.on_page_changed.disconnect(self.on_panel_page_changed)
     59 
     60     def OnStartScale(self, wnd):
     61         if self.is_enlistment_selected():
     62             panel = self.panels.get(ID_ENLISTMENT)
     63             if panel:
     64                 panel.OnStartScale()
     65 
     66     def OnEndScale(self, wnd):
     67         if self.is_enlistment_selected():
     68             panel = self.panels.get(ID_ENLISTMENT)
     69             if panel:
     70                 panel.OnEndScale()
     71 
     72     def is_enlistment_selected(self):
     73         selected = self.navigation_tree_data.GetSelected()
     74         if not selected:
     75             return False
     76         node = selected[0]
     77         panel_id = node.GetID()
     78         return panel_id == ID_ENLISTMENT
     79 
     80     def construct_ui(self):
     81         self.split_view = SideNavigationSplitView(name='split_view', parent=self.content, is_always_expanded_setting=is_expanded_setting, expanded_panel_width=240)
     82         self.side_navigation = SideNavigation(parent=self.split_view.panel, is_expanded_func=self.split_view.is_expanded, is_always_expanded_setting=is_expanded_setting)
     83         self.split_view.on_expanded_changed.connect(self.side_navigation.on_expanded_changed)
     84         self.reconstruct_panels()
     85         self.reconstruct_side_navigation()
     86 
     87     def reconstruct_panels(self):
     88         if self.panels_cont and not self.panels_cont.destroyed:
     89             self.panels_cont.Close()
     90         self.panels_cont = Container(name='panels_cont', parent=self.split_view.content, padLeft=16)
     91         self.navigation_tree_data = TreeData()
     92         self._construct_panels()
     93 
     94     def reconstruct_side_navigation(self):
     95         self.side_navigation.Flush()
     96         for node in self.navigation_tree_data.children:
     97             self._add_navigation_entry(node)
     98 
     99     def add_navigation_node(self, panel_id):
    100         return self.navigation_tree_data.AddNode(panel_id, nodeID=panel_id)
    101 
    102     def _add_navigation_entry(self, child_node):
    103         panel_id = child_node.GetID()
    104         self.side_navigation.add_entry(entry_id=panel_id, text=child_node.GetLabel(), on_click=self.on_side_navigation_entry_clicked, icon=child_node.GetIcon(), uniqueUiName=POINTER_NAME_BY_PANEL_ID.get(panel_id, None))
    105 
    106     def _construct_panels(self):
    107         self._landing_page_panel()
    108         if campaigns_enabled():
    109             self._construct_campaign_panel()
    110         self._construct_fw_panel()
    111         self._construct_insurgency_panel()
    112         self._construct_enlistment_panel()
    113 
    114     def _landing_page_panel(self):
    115         text = GetByLabel('UI/TheatersOfWar/OverviewPanel')
    116         self.navigation_tree_data.AddNode(text, nodeID=ID_LANDING_PAGE, icon=eveicon.house)
    117         panel = LandingPanel(parent=self.panels_cont, window_controller=self.window_controller)
    118         panel.Hide()
    119         self.panels[ID_LANDING_PAGE] = panel
    120 
    121     def _construct_fw_panel(self):
    122         text = GetByLabel('UI/TheatersOfWar/FactionalWarfarePanel')
    123         self.navigation_tree_data.AddNode(text, nodeID=ID_FW, icon=eveicon.factional_warfare)
    124         panel = FwPanel(parent=self.panels_cont)
    125         panel.Hide()
    126         self.panels[ID_FW] = panel
    127 
    128     def _construct_insurgency_panel(self):
    129         text = GetByLabel('UI/TheatersOfWar/InsurgenciesPanel')
    130         self.navigation_tree_data.AddNode(text, nodeID=ID_INSURGENCY, icon=eveicon.pirate_insurgencies)
    131         panel = InsurgencyPanel(parent=self.panels_cont)
    132         panel.Hide()
    133         self.panels[ID_INSURGENCY] = panel
    134 
    135     def _construct_enlistment_panel(self):
    136         text = GetByLabel('UI/TheatersOfWar/EnlistPanel')
    137         self.navigation_tree_data.AddNode(text, nodeID=ID_ENLISTMENT, icon=eveicon.flag)
    138         panel = EnlistmentPanel(parent=self.panels_cont)
    139         panel.Hide()
    140         self.panels[ID_ENLISTMENT] = panel
    141 
    142     def _construct_campaign_panel(self):
    143         text = GetByLabel('UI/TheatersOfWar/CampaignsPanel')
    144         self.navigation_tree_data.AddNode(text, nodeID=ID_CAMPAIGNS, icon=eveicon.campaign)
    145         campaign_panel_controller = self.window_controller.campaign_panel_controller
    146         panel = CampaignMainPanel(parent=self.panels_cont, campaign_panel_controller=campaign_panel_controller)
    147         panel.Hide()
    148         self.panels[ID_CAMPAIGNS] = panel
    149 
    150     def on_side_navigation_entry_clicked(self, entry):
    151         node = self.navigation_tree_data.GetChildByID(entry.entry_id)
    152         self.select_panel(entry.entry_id)
    153 
    154     def on_panel_page_changed(self, panel_id = None, extra_args = None):
    155         return self.select_panel(panel_id=panel_id, extra_args=extra_args)
    156 
    157     def select_panel(self, panel_id = None, **kwargs):
    158         node = self.navigation_tree_data.GetChildByID(panel_id)
    159         if not node:
    160             node = self.navigation_tree_data.GetChildByID(ID_LANDING_PAGE)
    161         if node:
    162             self._select_node(node, **kwargs)
    163 
    164     def _select_node(self, node, **kwargs):
    165         node.GetRootNode().DeselectAll()
    166         node.SetSelected(animate=False)
    167         self.on_tree_node_selected(node, **kwargs)
    168 
    169     def on_tree_node_selected(self, node, **kwargs):
    170         if self.destroyed:
    171             return
    172         panel_id = node.GetID()
    173         was_selected = self.window_controller.previously_selected_panel == panel_id
    174         self.window_controller.previously_selected_panel = panel_id
    175         self.side_navigation.set_entry_selected(panel_id)
    176         selected_panel = None
    177         for _panel_id, panel in self.panels.items():
    178             if panel_id == _panel_id:
    179                 selected_panel = panel
    180             else:
    181                 panel.Hide()
    182 
    183         if selected_panel:
    184             selected_panel.Show()
    185             if hasattr(selected_panel, 'LoadPanel'):
    186                 selected_panel.LoadPanel(was_selected, **kwargs)
    187         if self.destroyed:
    188             return
    189         self.window_controller.selected_panel_id = panel_id
    190         self.window_controller.register_history(panel_id, kwargs.get('extra_args', {}))
    191 
    192     def select_fw_panel(self, faction_id = None, system_id = None, forceExpanded = True, tab_id = None):
    193         if self.destroyed:
    194             return
    195         extra_args = {'faction_id': faction_id,
    196          'system_id': system_id,
    197          'forceExpanded': forceExpanded,
    198          'tab_id': tab_id}
    199         self.select_panel(ID_FW, **extra_args)
    200 
    201     def GetMenuMoreOptions(self):
    202         menuData = super(TheatersOfWarDashboardWnd, self).GetMenuMoreOptions()
    203         menuData.AddCheckbox(GetByLabel('UI/Campaigns/ShowAnimation'), campaign_animate_background)
    204         return menuData
    205 
    206     def Close(self, *args, **kwds):
    207         super(TheatersOfWarDashboardWnd, self).Close(*args, **kwds)
    208         with ExceptionEater('Closing TheatersOfWarDashboardWnd'):
    209             self.DisconnectSignals()
    210             self.window_controller.handle_destruction()
    211             self.window_controller = None