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

pointerToolFunctions.py (4308B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\pointerTool\pointerToolFunctions.py
      2 from eve.client.script.ui.shared.pointerTool.pointerToolConst import NEOCOM_PANEL_PREFIX
      3 from carbonui.uicore import uicore
      4 
      5 def DigToFindUniqueName(mouseOver):
      6     downUniqueElements = []
      7     CrawlDown(mouseOver, 'uniqueUiName', downUniqueElements)
      8     upUniqueElements = []
      9     CrawlUp(mouseOver, 'uniqueUiName', upUniqueElements)
     10     returnDict = [ (x.uniqueUiName.replace(NEOCOM_PANEL_PREFIX, ''), x) for x in downUniqueElements ]
     11     returnDict += [ (x.uniqueUiName.replace(NEOCOM_PANEL_PREFIX, ''), x) for x in upUniqueElements ]
     12     return returnDict
     13 
     14 
     15 def DigToFindName(mouseOver):
     16     downNameElements = []
     17     CrawlDown(mouseOver, 'name', downNameElements)
     18     upNameElements = []
     19     CrawlUp(mouseOver, 'name', upNameElements)
     20     returnList = [ (x.name, x) for x in downNameElements ]
     21     returnList += [ (x.name, x) for x in upNameElements ]
     22     return returnList
     23 
     24 
     25 def CrawlDown(element, nameAttribute, listOfFoundElements):
     26     elementName = getattr(element, nameAttribute, None)
     27     if elementName:
     28         listOfFoundElements.append(element)
     29     children = getattr(element, 'children', None)
     30     if not children:
     31         return
     32     for child in children:
     33         CrawlDown(child, nameAttribute, listOfFoundElements)
     34 
     35 
     36 def CrawlUp(element, nameAttribute, listOfFoundElements):
     37     parent = getattr(element, 'parent', None)
     38     if not parent:
     39         return
     40     parentName = getattr(parent, nameAttribute, None)
     41     if parentName:
     42         listOfFoundElements.append(parent)
     43     CrawlUp(parent, nameAttribute, listOfFoundElements)
     44 
     45 
     46 def FindDictForUniquelyNamedElements(element, namesToFind, foundDict):
     47     if getattr(element, 'uniqueUiName', None) in namesToFind and element.IsVisible():
     48         foundDict[element.uniqueUiName] = element
     49     children = getattr(element, 'children', None)
     50     if not children:
     51         return
     52     if getattr(element, 'name', None) == 'l_bracket':
     53         return
     54     for child in children:
     55         FindDictForUniquelyNamedElements(child, namesToFind, foundDict)
     56 
     57 
     58 def GetScreenElementsByUniqueName(elementNames):
     59     dictOfMissingElements = {}
     60     FindDictForUniquelyNamedElements(uicore.desktop, elementNames, dictOfMissingElements)
     61     return dictOfMissingElements
     62 
     63 
     64 def FindElementUnderMouse(mouseOver, mouseX = None, mouseY = None):
     65     relativesWithUniqueNames = DigToFindUniqueName(mouseOver)
     66     mouseX = uicore.uilib.x if mouseX is None else mouseX
     67     mouseY = uicore.uilib.y if mouseY is None else mouseY
     68     uiElementName, uiElement = FindUiElementNamesFromRelatives(relativesWithUniqueNames, mouseX, mouseY)
     69     if uiElementName is None:
     70         relativesWithNames = DigToFindName(mouseOver)
     71         uiElementName, uiElement = FindUiElementNamesFromRelatives(relativesWithNames, mouseX, mouseY)
     72     return (uiElementName, uiElement)
     73 
     74 
     75 def FindUiElementNamesFromRelatives(relatives, x, y):
     76     if not relatives:
     77         return (None, None)
     78     allPointers = sm.GetService('helpPointer').GetAllPointersByElementName()
     79     relativeNames = {x[0] for x in relatives}
     80     uiElementNames = {x for x in allPointers.iterkeys() if x in relativeNames}
     81     backup = []
     82     for eachRelativeName, eachRelative in relatives:
     83         if eachRelativeName in uiElementNames:
     84             if _IsMouseOutsideElement(eachRelative, x, y):
     85                 backup.append((eachRelativeName, eachRelative))
     86                 continue
     87             return (eachRelativeName, eachRelative)
     88 
     89     if backup:
     90         return backup[0]
     91     return (None, None)
     92 
     93 
     94 def _IsMouseOutsideElement(uiElement, x, y):
     95     if x < uiElement.absoluteLeft:
     96         return True
     97     if x > uiElement.absoluteRight:
     98         return True
     99     if y < uiElement.absoluteTop:
    100         return True
    101     if y > uiElement.absoluteBottom:
    102         return True
    103     return False
    104 
    105 
    106 def GetInfoOnElementUnderMouse(mouseOver, mouseX, mouseY):
    107     uiElementName, _ = FindElementUnderMouse(mouseOver, mouseX, mouseY)
    108     if not uiElementName:
    109         return
    110     allPointers = sm.GetService('helpPointer').GetAllPointersByElementName()
    111     for eachUiElementName, eachPointerObj in allPointers.iteritems():
    112         if eachUiElementName == uiElementName:
    113             return eachPointerObj