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

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()