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

modeButton.py (3740B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\dockedUI\modeButton.py
      2 import weakref
      3 import caching
      4 import localization
      5 from carbon.common.script.sys.serviceManager import ServiceManager
      6 from carbonui.control.button import Button
      7 from eve.client.script.ui import eveColor
      8 from eve.client.script.ui.control import primaryButton
      9 from eve.client.script.ui.view.viewStateConst import ViewState
     10 
     11 class ModeButton(Button):
     12 
     13     def __init__(self, docked_ui_controller, view_state_service, **kwargs):
     14         self._controller = ModeButtonController(docked_ui_controller, view_state_service)
     15         self._docked_ui_controller = docked_ui_controller
     16         self._view_state_service = view_state_service
     17         super(ModeButton, self).__init__(name='dockedModeBtn', func=self._execute, args=(), **kwargs)
     18         self._controller.connect(self)
     19 
     20     def Close(self):
     21         self._controller.close()
     22         super(ModeButton, self).Close()
     23 
     24     def LoadTooltipPanel(self, panel, owner):
     25         self._controller.load_tooltip_panel(panel, owner)
     26 
     27     def _execute(self):
     28         with self.busy_context:
     29             self._controller.execute()
     30 
     31 
     32 class ModeButtonController(object):
     33     _button_ref = None
     34 
     35     def __init__(self, docked_ui_controller, view_state_service):
     36         self._docked_ui_controller = docked_ui_controller
     37         self._view_state_service = view_state_service
     38 
     39     def connect(self, button):
     40         self._button_ref = weakref.ref(button)
     41         self._update_enabled(button)
     42         self._update_label(button)
     43         ServiceManager.Instance().RegisterForNotifyEvent(self, 'OnDockingProgressChanged')
     44         ServiceManager.Instance().RegisterForNotifyEvent(self, 'OnPrimaryViewChanged')
     45 
     46     def close(self):
     47         ServiceManager.Instance().UnregisterForNotifyEvent(self, 'OnDockingProgressChanged')
     48         ServiceManager.Instance().UnregisterForNotifyEvent(self, 'OnPrimaryViewChanged')
     49 
     50     def execute(self):
     51         self._docked_ui_controller.ChangeDockedMode(self._view_state_service)
     52 
     53     def load_tooltip_panel(self, panel, owner):
     54         panel.LoadGeneric1ColumnTemplate()
     55         if self._is_viewing_hangar():
     56             text = localization.GetByLabel('UI/Station/ViewOutsideHint')
     57         else:
     58             text = localization.GetByLabel('UI/Station/ViewHangarHint')
     59         panel.AddLabelMedium(text=text, wrapWidth=220)
     60         if not self._get_enabled():
     61             panel.AddSpacer(height=8)
     62             panel.AddLabelMedium(text=localization.GetByLabel('UI/Station/UndockingInProgressHint'), wrapWidth=220, color=eveColor.DANGER_RED)
     63 
     64     def _get_button(self):
     65         if self._button_ref is not None:
     66             return self._button_ref()
     67 
     68     def _is_undocking(self):
     69         return self._docked_ui_controller.IsExiting() or self._docked_ui_controller.InProcessOfUndocking()
     70 
     71     def _is_viewing_hangar(self):
     72         return self._view_state_service.IsPrimaryViewActive(ViewState.Hangar)
     73 
     74     def _get_enabled(self):
     75         return not self._is_undocking()
     76 
     77     def _update_enabled(self, button):
     78         button.enabled = self._get_enabled()
     79 
     80     def _get_label(self):
     81         if self._is_viewing_hangar():
     82             return localization.GetByLabel('UI/Station/ViewOutside')
     83         else:
     84             return localization.GetByLabel('UI/Station/ViewHangar')
     85 
     86     def _update_label(self, button):
     87         button.label = self._get_label()
     88 
     89     def OnDockingProgressChanged(self, progress):
     90         button = self._get_button()
     91         if button:
     92             self._update_enabled(button)
     93 
     94     def OnPrimaryViewChanged(self, old_view_info, new_view_info):
     95         button = self._get_button()
     96         if button:
     97             self._update_label(button)