undockButton.py (3194B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\dockedUI\undockButton.py 2 import weakref 3 import localization 4 from carbon.common.script.sys.serviceManager import ServiceManager 5 from carbonui.control.button import Button 6 from eve.client.script.ui.control import primaryButton 7 from carbonui import ButtonVariant, Density 8 from uihighlighting.uniqueNameConst import UNIQUE_NAME_UNDOCK_BTN 9 10 class UndockButton(Button): 11 12 def __init__(self, docked_ui_controller, **kwargs): 13 self._controller = UndockButtonController(docked_ui_controller) 14 super(UndockButton, self).__init__(name='undockButton', density=Density.EXPANDED, variant=ButtonVariant.PRIMARY, func=docked_ui_controller.Undock, args=(), uniqueUiName=UNIQUE_NAME_UNDOCK_BTN, **kwargs) 15 self._controller.connect(self) 16 17 def Close(self): 18 if self._controller: 19 self._controller.close() 20 super(UndockButton, self).Close() 21 22 23 class UndockButtonController(object): 24 _button_ref = None 25 26 def __init__(self, docked_ui_controller): 27 self._docked_ui_controller = docked_ui_controller 28 29 def connect(self, button): 30 self._button_ref = weakref.ref(button) 31 self._update_busy(button) 32 self._update_button_label(button) 33 self._update_enabled(button) 34 button.on_hovered_changed.connect(self._on_button_hovered_changed) 35 ServiceManager.Instance().RegisterForNotifyEvent(self, 'OnDockingProgressChanged') 36 37 def close(self): 38 button = self._get_button() 39 if button: 40 button.on_hovered_changed.disconnect(self._on_button_hovered_changed) 41 ServiceManager.Instance().UnregisterForNotifyEvent(self, 'OnDockingProgressChanged') 42 43 def _get_button(self): 44 if self._button_ref is not None: 45 return self._button_ref() 46 47 def _is_beyond_point_of_no_return(self): 48 return self._docked_ui_controller.InProcessOfUndocking() 49 50 def _is_undocking(self): 51 return self._docked_ui_controller.IsExiting() or self._is_beyond_point_of_no_return() 52 53 def _update_button_label(self, button): 54 if self._is_beyond_point_of_no_return(): 55 button.label = localization.GetByLabel('UI/Station/UndockingConfirmed') 56 elif self._is_undocking() and button.hovered: 57 button.label = localization.GetByLabel('UI/Station/AbortUndock') 58 elif self._is_undocking(): 59 button.label = localization.GetByLabel('UI/Station/Undocking') 60 else: 61 button.label = localization.GetByLabel('UI/Neocom/UndockBtn') 62 63 def _update_busy(self, button): 64 if self._is_undocking(): 65 button.busy = True 66 else: 67 button.busy = False 68 69 def _update_enabled(self, button): 70 button.enabled = not self._docked_ui_controller.InProcessOfUndocking() 71 72 def _on_button_hovered_changed(self, button): 73 self._update_button_label(button) 74 75 def OnDockingProgressChanged(self, progress): 76 button = self._get_button() 77 if button: 78 self._update_busy(button) 79 self._update_button_label(button) 80 self._update_enabled(button)