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

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)