corvetteButton.py (4954B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\dockedUI\corvetteButton.py 2 import functools 3 import blue 4 import carbonui.control.button 5 import localization 6 import signals 7 import uthread 8 from carbonui import ButtonVariant 9 from eve.common.script.sys import idCheckers 10 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst 11 12 class CorvetteButtonBase(carbonui.control.button.Button): 13 default_name = 'corvetteButton' 14 uniqueUiName = pConst.UNIQUE_NAME_CORVETTE_BTN 15 default_variant = ButtonVariant.GHOST 16 17 def ApplyAttributes(self, attributes): 18 self.controller = Controller() 19 attributes.func = self.controller.click 20 attributes.args = () 21 super(CorvetteButtonBase, self).ApplyAttributes(attributes) 22 self._update_enabled() 23 self.controller.on_enabled_changed.connect(self._update_enabled) 24 25 def Close(self): 26 self.controller.close() 27 super(CorvetteButtonBase, self).Close() 28 29 def LoadTooltipPanel(self, panel, owner): 30 panel.LoadGeneric1ColumnTemplate() 31 add_tooltip_title(panel) 32 add_tooltip_description(panel) 33 add_tooltip_error_message(panel, self.controller) 34 35 def _update_enabled(self): 36 if self.controller.is_enabled: 37 self.Enable() 38 else: 39 self.Disable() 40 41 42 class CorvetteButton(CorvetteButtonBase): 43 default_fixedheight = 24 44 45 @property 46 def default_label(self): 47 return localization.GetByLabel('UI/Station/CreateNewbieShipButton') 48 49 def LoadTooltipPanel(self, panel, owner): 50 panel.LoadGeneric1ColumnTemplate() 51 add_tooltip_description(panel) 52 add_tooltip_error_message(panel, self.controller) 53 54 55 class CorvetteIconButton(CorvetteButtonBase): 56 default_texturePath = 'res:/UI/Texture/classes/ShipTree/groupIcons/rookie.png' 57 58 def LoadTooltipPanel(self, panel, owner): 59 panel.LoadGeneric1ColumnTemplate() 60 add_tooltip_title(panel) 61 add_tooltip_description(panel) 62 add_tooltip_error_message(panel, self.controller) 63 64 65 def add_tooltip_title(panel): 66 panel.AddLabelMedium(text=localization.GetByLabel('UI/Station/CreateNewbieShipButton'), wrapWidth=220, bold=True) 67 68 69 def add_tooltip_description(panel): 70 panel.AddLabelMedium(text=localization.GetByLabel('UI/Station/CreateNewbieShipTooltip'), wrapWidth=220, color=(0.6, 0.6, 0.6, 1.0)) 71 72 73 def add_tooltip_error_message(panel, controller): 74 if controller.is_aboard_corvette: 75 panel.AddSpacer(height=8) 76 panel.AddLabelMedium(text=localization.GetByLabel('UI/Station/AlreadyInNewbieShip'), wrapWidth=220, color=(1.0, 0.0, 0.0, 1.0)) 77 78 79 def threaded(f): 80 81 @functools.wraps(f) 82 def wrapper(*args, **kwargs): 83 uthread.new(f, *args, **kwargs) 84 85 return wrapper 86 87 88 class Controller(object): 89 __notifyevents__ = ['ProcessActiveShipChanged'] 90 default_enabled = False 91 92 def __init__(self): 93 self.on_enabled_changed = signals.Signal(signalName='on_enabled_changed') 94 self._is_clicking = False 95 self._is_enabled = self.default_enabled 96 self._update_when_ship_is_ready() 97 self.clickLock = False 98 sm.RegisterNotify(self) 99 100 @property 101 def godma_service(self): 102 return sm.GetService('godma') 103 104 @property 105 def is_aboard_corvette(self): 106 ship_item = self.godma_service.GetItem(session.shipid) 107 if ship_item is not None: 108 return idCheckers.IsNewbieShip(ship_item.groupID) 109 else: 110 return False 111 112 @property 113 def is_enabled(self): 114 return self._is_enabled 115 116 @is_enabled.setter 117 def is_enabled(self, is_enabled): 118 was_enabled = self.is_enabled 119 self._is_enabled = is_enabled 120 if was_enabled != is_enabled: 121 self.on_enabled_changed() 122 123 @property 124 def station_service(self): 125 return sm.GetService('station') 126 127 @property 128 def is_ship_ready(self): 129 return self.godma_service.IsItemReady(session.shipid) 130 131 def click(self): 132 if self._is_clicking or self.clickLock: 133 return 134 self._is_clicking = True 135 try: 136 self.clickLock = True 137 self._remove_click_lock_in_500_ms() 138 self.on_clicked() 139 finally: 140 self._is_clicking = False 141 142 @threaded 143 def _remove_click_lock_in_500_ms(self): 144 blue.synchro.SleepWallclock(500) 145 self.clickLock = False 146 147 def close(self): 148 sm.UnregisterNotify(self) 149 150 def on_clicked(self): 151 self.station_service.CreateNewbieShip() 152 153 def _update_enabled(self): 154 self.is_enabled = not self.is_aboard_corvette 155 156 @threaded 157 def _update_when_ship_is_ready(self): 158 while not self.is_ship_ready: 159 blue.synchro.SleepWallclock(100) 160 161 self._update_enabled() 162 163 def ProcessActiveShipChanged(self, ship_id, old_ship_id): 164 self._update_enabled()