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

implant.py (4388B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\entries\implant.py
      2 import blue
      3 import evetypes
      4 import localization
      5 from carbon.client.script.environment.AudioUtil import PlaySound
      6 from carbon.common.script.util.format import FmtTimeInterval
      7 from carbon.common.script.util.linkUtil import GetShowInfoLink
      8 from carbon.common.script.util.timerstuff import AutoTimer
      9 from carbonui import uiconst
     10 from carbonui.control.scrollentries import SE_BaseClassCore
     11 from eve.client.script.ui.control.eveIcon import Icon
     12 from eve.client.script.ui.control.eveLabel import EveLabelMedium
     13 from eve.client.script.ui.control.infoIcon import InfoIcon
     14 from eve.common.lib import appConst as const
     15 from menu import MenuLabel
     16 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     17 
     18 class ImplantEntry(SE_BaseClassCore):
     19     __guid__ = 'listentry.ImplantEntry'
     20     __params__ = ['label']
     21 
     22     def Startup(self, *etc):
     23         self.sr.label = EveLabelMedium(text='', parent=self, left=32, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED)
     24         self.sr.timeLabel = EveLabelMedium(text='', parent=self, left=18, top=2, state=uiconst.UI_DISABLED, align=uiconst.BOTTOMRIGHT)
     25         self.sr.icon = Icon(icon='ui_22_32_30', parent=self, size=32, align=uiconst.RELATIVE, state=uiconst.UI_DISABLED)
     26         self.sr.infoicon = InfoIcon(left=2, parent=self, idx=0, align=uiconst.CENTERRIGHT)
     27         self.sr.infoicon.OnClick = self.ShowInfo
     28 
     29     def Load(self, node):
     30         self.sr.node = node
     31         data = node
     32         sublevel = node.sublevel or 0
     33         if evetypes.GetGroupID(self.sr.node.implant_booster.typeID) == const.groupBooster:
     34             slot = getattr(sm.GetService('godma').GetType(node.implant_booster.typeID), 'boosterness', None)
     35             timeToEnd = node.implant_booster.expiryTime
     36         else:
     37             slot = getattr(sm.GetService('godma').GetType(node.implant_booster.typeID), 'implantness', None)
     38             timeToEnd = None
     39         if slot is None:
     40             self.sr.label.text = data.label
     41         else:
     42             self.sr.label.text = localization.GetByLabel('UI/Control/Entries/ImplantLabel', implantName=data.label, slotNum=int(slot))
     43         self.sr.icon.LoadIcon(evetypes.GetIconID(node.implant_booster.typeID), ignoreSize=True)
     44         self.sr.icon.SetSize(32, 32)
     45         if timeToEnd is not None:
     46             self.UpdateTime(timeToEnd)
     47             self.sr.timeOutTimer = AutoTimer(1000, self.UpdateTime, timeToEnd)
     48         else:
     49             self.sr.timeLabel.text = ''
     50             self.sr.timeOutTimer = None
     51         offset = sublevel * 16
     52         self.sr.icon.left = offset
     53         self.sr.label.left = self.sr.icon.left + self.sr.icon.width
     54 
     55     def UpdateTime(self, timeToEnd):
     56         timeInterval = timeToEnd - blue.os.GetWallclockTime()
     57         if timeInterval > const.MONTH30:
     58             timeBreakAt = 'hour'
     59         elif timeInterval > const.DAY:
     60             timeBreakAt = 'min'
     61         else:
     62             timeBreakAt = 'sec'
     63         self.sr.timeLabel.text = FmtTimeInterval(timeInterval, timeBreakAt)
     64 
     65     def GetMenu(self):
     66         m = [(MenuLabel('UI/Commands/ShowInfo'), self.ShowInfo)]
     67         if not evetypes.GetGroupID(self.sr.node.implant_booster.typeID) == const.groupBooster and getattr(self.sr.node.implant_booster, 'itemID', None):
     68             m.append((MenuLabel('UI/Control/Entries/ImplantUnplug'), self.RemoveImplant, (self.sr.node.implant_booster.itemID, self.sr.node.implant_booster.typeID)))
     69         return m
     70 
     71     def OnDblClick(self, *args):
     72         self.ShowInfo()
     73 
     74     def ShowInfo(self, *args):
     75         sm.GetService('info').ShowInfo(self.sr.node.implant_booster.typeID, getattr(self.sr.node.implant_booster, 'itemID', None))
     76 
     77     def RemoveImplant(self, itemID, typeID):
     78         implantLink = GetShowInfoLink(typeID, evetypes.GetName(typeID), itemID)
     79         if prompt_player_fsd_dialog('ConfirmUnPlugInImplant', {'implantLink': implantLink}, uiconst.OKCANCEL) == uiconst.ID_OK:
     80             PlaySound(uiconst.SOUND_REMOVE)
     81             sm.GetService('godma').GetDogmaLM().DestroyImplant(itemID)
     82 
     83     def GetDynamicHeight(self, width):
     84         text = localization.GetByLabel('UI/Control/Entries/ImplantLabel', implantName=self.label, slotNum=0)
     85         _, textHeight = EveLabelMedium.MeasureTextSize(text)
     86         return max(32, textHeight + const.defaultPadding)