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