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