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

generic.py (8610B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\entries\generic.py
      2 import carbonui
      3 import carbonui.text.styles
      4 import evetypes
      5 import utillib
      6 from carbonui import fontconst, uiconst
      7 from carbonui.control.scrollentries import SE_BaseClassCore
      8 from carbonui.primitives.fill import Fill
      9 from carbonui.uicore import uicore
     10 from carbonui.util.various_unsorted import GetAttrs
     11 from eve.client.script.ui.control.eveLabel import EveLabelMedium
     12 from eve.client.script.ui.control.infoIcon import InfoIcon
     13 from eve.client.script.ui.util import uix
     14 from eve.common.script.util.industryCommon import IsBlueprintCategory
     15 from eveservices.menu import GetMenuService
     16 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     17 LABEL_PADDING = 4
     18 events = ('OnClick', 'OnMouseDown', 'OnMouseUp', 'OnDblClick', 'OnMouseHover')
     19 
     20 class Generic(SE_BaseClassCore):
     21     __guid__ = 'listentry.Generic'
     22     __params__ = ['label']
     23     LABEL_PADDING = 4
     24     DEFAULT_LABEL_STATE = uiconst.UI_DISABLED
     25 
     26     def _OnClose(self):
     27         for eventName in events:
     28             setattr(self.sr, eventName, None)
     29 
     30         SE_BaseClassCore._OnClose(self)
     31 
     32     def Startup(self, *args):
     33         self.sr.label = carbonui.text.styles.TextBody(name='entryLabel', text='', parent=self, left=self.labelLeftDefault, state=uiconst.UI_DISABLED, maxLines=1, align=uiconst.CENTERLEFT)
     34         for eventName in events:
     35             setattr(self.sr, eventName, None)
     36 
     37         self.sr.infoicon = None
     38 
     39     def Load(self, node):
     40         self.sr.node = node
     41         data = node
     42         self.UpdateHint()
     43         self.confirmOnDblClick = data.Get('confirmOnDblClick', 0)
     44         self.typeID = data.Get('typeID', None)
     45         self.itemID = data.Get('itemID', None)
     46         if node.selected:
     47             self.Select()
     48         else:
     49             self.Deselect()
     50         if node.showinfo and node.typeID:
     51             if not self.sr.infoicon:
     52                 self.sr.infoicon = InfoIcon(left=1, parent=self, idx=0, align=uiconst.CENTERRIGHT)
     53                 self.sr.infoicon.OnClick = self.ShowInfo
     54             self.sr.infoicon.state = uiconst.UI_NORMAL
     55         elif self.sr.infoicon:
     56             self.sr.infoicon.state = uiconst.UI_HIDDEN
     57         for eventName in events:
     58             if data.Get(eventName, None):
     59                 setattr(self.sr, eventName, data.Get(eventName, None))
     60 
     61         preAutoUpdateFlag = self.sr.label.autoUpdate
     62         self.sr.label.autoUpdate = False
     63         sublevelCorrection = self.sr.node.scroll.sr.get('sublevelCorrection', 0) if self.sr.node.scroll else 0
     64         sublevel = max(0, data.Get('sublevel', 0) - sublevelCorrection)
     65         self.sr.label.maxLines = data.Get('maxLines', 1)
     66         self.sr.label.left = self.labelLeftDefault + 16 * sublevel
     67         self.sr.label.fontsize = data.Get('fontsize', fontconst.EVE_MEDIUM_FONTSIZE)
     68         self.sr.label.letterspace = data.Get('hspace', 0)
     69         self.sr.label.SetTextColor(data.Get('fontColor', EveLabelMedium.default_color))
     70         self.sr.label.text = self._GetText()
     71         self.sr.label.Update()
     72         self.sr.label.SetState(data.Get('labelState', self.DEFAULT_LABEL_STATE))
     73         self.sr.label.maxWidth = data.Get('labelMaxWidth', None)
     74         self.sr.label.autoUpdate = preAutoUpdateFlag
     75 
     76     def _GetText(self):
     77         return self.sr.node.label
     78 
     79     def UpdateHint(self):
     80         data = self.sr.node
     81         hint = data.hint
     82         if hint is not None:
     83             self.hint = hint
     84 
     85     @classmethod
     86     def GetHeight(cls, *args):
     87         node, width = args
     88         if node.vspace is not None:
     89             node.height = uix.GetTextHeight(node.label, maxLines=node.maxLines) + node.vspace
     90         else:
     91             node.height = uix.GetTextHeight(node.label, maxLines=node.maxLines, width=node.labelMaxWidth) + cls.LABEL_PADDING
     92         return node.height
     93 
     94     def OnMouseHover(self, *args):
     95         if self.sr.node and self.sr.node.Get('OnMouseHover', None):
     96             self.sr.node.OnMouseHover(self)
     97 
     98     def OnMouseEnter(self, *args):
     99         SE_BaseClassCore.OnMouseEnter(self, *args)
    100         if self.sr.node:
    101             prompt_player_fsd_dialog('ListEntryEnter')
    102             if self.sr.node.Get('OnMouseEnter', None):
    103                 self.sr.node.OnMouseEnter(self)
    104 
    105     def OnMouseExit(self, *args):
    106         SE_BaseClassCore.OnMouseExit(self, *args)
    107         if self.sr.node:
    108             if self.sr.node.Get('OnMouseExit', None):
    109                 self.sr.node.OnMouseExit(self)
    110 
    111     def OnClick(self, *args):
    112         if GetAttrs(self, 'sr', 'node'):
    113             if self.sr.node.Get('selectable', 1):
    114                 self.sr.node.scroll.SelectNode(self.sr.node)
    115             prompt_player_fsd_dialog('ListEntryClick')
    116             if not self or self.destroyed:
    117                 return
    118             if self.sr.node.Get('OnClick', None):
    119                 self.sr.node.OnClick(self)
    120 
    121     def OnDblClick(self, *args):
    122         if self.sr.node:
    123             self.sr.node.scroll.SelectNode(self.sr.node)
    124             if self.sr.node.Get('OnDblClick', None):
    125                 if isinstance(self.sr.node.OnDblClick, tuple):
    126                     func = self.sr.node.OnDblClick[0]
    127                     func(self, *self.sr.node.OnDblClick[1:])
    128                 else:
    129                     self.sr.node.OnDblClick(self)
    130             elif getattr(self, 'confirmOnDblClick', None):
    131                 uicore.registry.Confirm()
    132             elif self.sr.node.Get('typeID', None):
    133                 self.ShowInfo()
    134 
    135     def OnMouseDown(self, *args):
    136         SE_BaseClassCore.OnMouseDown(self, *args)
    137         if self.sr.node and self.sr.node.Get('OnMouseDown', None):
    138             self.sr.node.OnMouseDown(self)
    139 
    140     def OnMouseUp(self, *args):
    141         SE_BaseClassCore.OnMouseUp(self, *args)
    142         if not self or self.destroyed:
    143             return
    144         if self.sr.node and self.sr.node.Get('OnMouseUp', None):
    145             self.sr.node.OnMouseUp(self)
    146 
    147     def ShowInfo(self, *args):
    148         if self.sr.node.Get('isStation', 0):
    149             stationinfo = sm.GetService('ui').GetStationStaticInfo(self.itemID)
    150             sm.GetService('info').ShowInfo(stationinfo.stationTypeID, self.itemID)
    151             return
    152         if self.sr.node.Get('typeID', None):
    153             abstractinfo = self.sr.node.Get('abstractinfo', utillib.KeyVal())
    154             typeID = self.sr.node.Get('typeID', None)
    155             itemID = self.sr.node.Get('itemID', None) or None
    156             if IsBlueprintCategory(evetypes.GetCategoryID(typeID)):
    157                 isCopy = self.sr.node.isCopy
    158                 abstractinfo.bpData = sm.GetService('blueprintSvc').GetBlueprintTypeCopy(typeID=typeID, original=not isCopy)
    159             sm.GetService('info').ShowInfo(typeID, itemID, abstractinfo=abstractinfo)
    160 
    161     def GetMenu(self):
    162         if not self.sr.node.Get('ignoreRightClick', 0):
    163             self.OnClick()
    164         if hasattr(self, 'sr'):
    165             if self.sr.node and self.sr.node.Get('GetMenu', None):
    166                 return self.sr.node.GetMenu(self)
    167             if getattr(self, 'itemID', None) or getattr(self, 'typeID', None):
    168                 return GetMenuService().GetMenuFromItemIDTypeID(getattr(self, 'itemID', None), getattr(self, 'typeID', None))
    169         return []
    170 
    171     def OnDropData(self, dragObj, nodes):
    172         data = self.sr.node
    173         if data.OnDropData:
    174             data.OnDropData(dragObj, nodes)
    175 
    176     def OnDragEnter(self, dragSource, dragData):
    177         data = self.sr.node
    178         if data.OnDragEnter:
    179             data.OnDragEnter(dragSource, dragData)
    180 
    181     def OnDragExit(self, dragSource, dragData):
    182         data = self.sr.node
    183         if data.OnDragExit:
    184             data.OnDragExit(dragSource, dragData)
    185 
    186     def DoSelectNode(self, toggle = 0):
    187         self.sr.node.scroll.GetSelectedNodes(self.sr.node, toggle=toggle)
    188 
    189     def GetRadialMenuIndicator(self, create = True, *args):
    190         indicator = getattr(self, 'radialMenuIndicator', None)
    191         if indicator and not indicator.destroyed:
    192             return indicator
    193         if not create:
    194             return
    195         self.radialMenuIndicator = Fill(bgParent=self, color=(1, 1, 1, 0.25), name='radialMenuIndicator')
    196         return self.radialMenuIndicator
    197 
    198     def ShowRadialMenuIndicator(self, slimItem, *args):
    199         indicator = self.GetRadialMenuIndicator(create=True)
    200         indicator.display = True
    201 
    202     def HideRadialMenuIndicator(self, slimItem, *args):
    203         indicator = self.GetRadialMenuIndicator(create=False)
    204         if indicator:
    205             indicator.display = False
    206 
    207     @classmethod
    208     def GetCopyData(cls, node):
    209         return node.label