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

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)