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)