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

link.py (5282B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\control\link.py
      2 import blue
      3 import eveformat
      4 from carbon.client.script.environment.AudioUtil import PlaySound
      5 from carbon.common.script.util.commonutils import StripTags
      6 from carbon.common.script.util.mathUtil import LtoI
      7 from carbonui.util.bunch import Bunch
      8 from carbon.common.script.util import commonutils
      9 import carbonui.const as uiconst
     10 from carbonui.primitives.container import Container
     11 from carbonui.primitives.fill import Fill
     12 from chroma import Color
     13 
     14 class Link(Container):
     15     isDragObject = True
     16 
     17     def GetDragData(self, *args):
     18         if getattr(self, 'url', None) and getattr(self, 'linkText', None):
     19             entry = Bunch()
     20             entry.__guid__ = 'TextLink'
     21             entry.url = self.url
     22             entry.displayText = self.linkText
     23             return [entry]
     24 
     25     @classmethod
     26     def PrepareDrag(cls, dragContainer, dragSource, *args):
     27         dragData = dragContainer.dragData[0]
     28         displayText = eveformat.truncate_text_ignoring_tags(dragData.displayText, 24, '...')
     29         from carbonui.control.label import LabelOverride as Label
     30         label = Label(parent=dragContainer, text=commonutils.StripTags(displayText), align=uiconst.TOPLEFT, bold=True)
     31         Fill(parent=dragContainer, color=(0, 0, 0, 0.3), padding=(-10, -2, -10, -2))
     32         dragContainer.width = label.textwidth
     33         dragContainer.height = label.textheight
     34         return (2, label.textheight)
     35 
     36     def OnClick(self, *args):
     37         if self.url:
     38             PlaySound(uiconst.SOUND_BUTTON_CLICK)
     39             self.ClickLink(self, self.url.replace('&', '&'))
     40 
     41     def ClickLink(self, parent, URL):
     42         linkUsed = self.ResolveInGameLink(parent, URL)
     43         if not linkUsed:
     44             self.UrlHandlerDelegate(parent, 'GoTo', URL)
     45 
     46     def GetStandardLinkHint(self, url, **kwds):
     47         link_service = sm.GetService('link')
     48         if link_service.has_handler_for(url):
     49             return link_service.get_hint(url)
     50 
     51     def LoadTooltipPanel(self, tooltipPanel, *args):
     52         pass
     53 
     54     def GetLinkFormat(self, url, linkState = None, linkStyle = None):
     55         linkState = linkState or uiconst.LINK_IDLE
     56         linkStyle = linkStyle or uiconst.LINKSTYLE_REGULAR
     57         color = sm.GetService('link').get_color(url, linkState, linkStyle)
     58         fmt = Bunch()
     59         fmt.color = LtoI(Color.from_any(color).as_argb_int32())
     60         fmt.underline = linkState in (uiconst.LINK_ACTIVE, uiconst.LINK_HOVER)
     61         fmt.bold = sm.GetService('link').get_bold(url, linkStyle)
     62         return fmt
     63 
     64     def FormatLinkParams(self, params, linkState = None, linkStyle = None):
     65         if 'priorUrlColor' not in params:
     66             params.priorUrlColor = params.color
     67         if 'priorUrlBold' not in params:
     68             params.priorUrlBold = params.bold
     69         if 'priorUrlItalic' not in params:
     70             params.priorUrlItalic = params.italic
     71         if 'priorUrlUnderline' not in params:
     72             params.priorUrlUnderline = params.underline
     73         linkFmt = self.GetLinkFormat(params.url, linkState, linkStyle)
     74         if linkFmt.color is not None:
     75             params.color = linkFmt.color
     76         if linkFmt.underline is not None:
     77             params.underline = linkFmt.underline
     78         if linkFmt.bold is not None:
     79             params.bold = linkFmt.bold
     80         if linkFmt.italic is not None:
     81             params.italic = linkFmt.italic
     82 
     83     def ResolveInGameLink(self, parent, URL):
     84         link_service = sm.GetService('link')
     85         if link_service.has_handler_for(URL):
     86             link_service.resolve(URL, self.GetLinkText(parent))
     87             return True
     88         return False
     89 
     90     def GetLinkText(self, parent):
     91         from carbonui.control.label import LabelCore
     92         if isinstance(parent, LabelCore):
     93             drag_link_data = getattr(parent, '_dragLinkData', None)
     94             link_text = drag_link_data[0] if drag_link_data is not None else None
     95         else:
     96             link_text = getattr(parent, 'linkText', None)
     97         return StripTags(link_text)
     98 
     99     def CanOpenBrowser(self, *args):
    100         return False
    101 
    102     def GetMenu(self):
    103         if getattr(self, 'url', None) is None:
    104             return []
    105         return self.GetLinkMenu(self, self.url)
    106 
    107     def GetLinkMenu(self, parent, url):
    108         link_service = sm.GetService('link')
    109         if link_service.has_handler_for(url):
    110             return link_service.get_menu(url) or []
    111         return []
    112 
    113     def ValidateURL(self, URL):
    114         badURLs = self.GetBadUrls()
    115         for badURL in badURLs:
    116             if URL.startswith(badURL):
    117                 return False
    118 
    119         return True
    120 
    121     def GetBadUrls(self, *args):
    122         return ['shellexec:', 'cmd:/']
    123 
    124     def CopyUrl(self, url):
    125         blue.pyos.SetClipboardData(url)
    126 
    127     def UrlHandlerDelegate(self, parent, funcName, args):
    128         handler = getattr(self, 'URLHandler', None)
    129         if not handler and getattr(parent, 'sr', None) and getattr(parent.sr, 'node', None):
    130             handler = getattr(parent.sr.node, 'URLHandler', None)
    131         if handler:
    132             func = getattr(handler, funcName, None)
    133             if func:
    134                 func(args)
    135                 return
    136         self.ResolveInGameLink(parent, args)