windowController.py (3652B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\theatersOfWar\dashboard\windowController.py 2 from __future__ import absolute_import 3 from clientsettings.setting import CharSettingNumeric 4 from contextlib import contextmanager 5 from eve.client.script.ui.control.historyBuffer import HistoryBuffer 6 from eve.client.script.ui.shared.theatersOfWar.campaigns.panel_controller import CampaignPanelController 7 from eve.client.script.ui.shared.theatersOfWar.dashboard.dashboardConst import ID_CAMPAIGNS 8 from eveexceptions import ExceptionEater 9 from .signals import Signal 10 selected_panel_id = CharSettingNumeric('TheatersOfWar_SelectedPanelID', False) 11 12 class TheatersOfWarWindowController(object): 13 14 def __init__(self): 15 self._history = HistoryBuffer() 16 self._campaign_panel_controller = None 17 self._previously_selected_panel = None 18 self.on_page_changed = Signal('on_page_changed') 19 20 @property 21 def campaign_panel_controller(self): 22 if self._campaign_panel_controller is None: 23 self._campaign_panel_controller = CampaignPanelController() 24 self._campaign_panel_controller.on_campaign_selected.connect(self.on_campaign_selected) 25 return self._campaign_panel_controller 26 27 @property 28 def previously_selected_panel(self): 29 return self._previously_selected_panel 30 31 @previously_selected_panel.setter 32 def previously_selected_panel(self, value): 33 self._previously_selected_panel = value 34 35 @property 36 def is_back_available(self): 37 return self._history.IsBackEnabled() 38 39 @property 40 def is_forward_available(self): 41 return self._history.IsForwardEnabled() 42 43 def go_forward(self): 44 if not self.is_forward_available: 45 return 46 page_id, extra_args = self._history.GoForward() 47 self._change_page(page_id, append_history=False, extra_args=extra_args) 48 49 def go_back(self): 50 if not self.is_back_available: 51 return 52 page_id, extra_args = self._history.GoBack() 53 self._change_page(page_id, append_history=False, extra_args=extra_args) 54 55 def _change_page(self, page_id, append_history = True, extra_args = None): 56 extra_args = extra_args or {} 57 self._page_id = page_id 58 with ignore_calls_to_method(self, 'register_history'): 59 self.on_page_changed(page_id, extra_args) 60 61 @property 62 def selected_panel_id(self): 63 return selected_panel_id.get() 64 65 @selected_panel_id.setter 66 def selected_panel_id(self, panel_id): 67 selected_panel_id.set(panel_id) 68 69 def register_history(self, panel_id, extra_args = None): 70 extra_args = extra_args or {} 71 self._history.Append((panel_id, extra_args)) 72 73 def on_campaign_selected(self, campaign_id): 74 extra_args = {'campaign_id': campaign_id} if campaign_id else {} 75 self.register_history(ID_CAMPAIGNS, extra_args) 76 77 def handle_destruction(self): 78 self._perform_cleanup() 79 80 def __del__(self): 81 self._perform_cleanup() 82 83 def _perform_cleanup(self): 84 with ExceptionEater('Failing _perform_cleanup in TheatersOfWarWindowController'): 85 if self._campaign_panel_controller: 86 self._campaign_panel_controller.handle_destruction() 87 self.on_page_changed.clear() 88 89 90 @contextmanager 91 def ignore_calls_to_method(obj, method_name): 92 original = getattr(obj, method_name) 93 94 def _ignore_method_call(*args, **kwargs): 95 pass 96 97 setattr(obj, method_name, _ignore_method_call) 98 try: 99 yield 100 finally: 101 setattr(obj, method_name, original)