radialMenuSvc.py (5533B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\radialMenu\radialMenuSvc.py 2 from eve.client.script.ui.util import uix 3 import carbon.common.script.sys.service as service 4 import uthread 5 import carbonui.const as uiconst 6 import geo2 7 from carbon.common.script.util import timerstuff 8 from carbonui.uicore import uicore 9 from eve.client.script.parklife import states as state 10 from eve.client.script.ui.shared.radialMenu import spaceRadialMenuFunctions, NORMAL_RADIAL_MENU, BROADCAST_RADIAL_MENU 11 from eve.client.script.ui.shared.radialMenu.broadcastRadialMenu import RadialMenuBroadcast 12 from eve.client.script.ui.shared.radialMenu.radialMenu import RadialMenuSpace 13 from eve.client.script.util.bubble import SlimItemFromCharID 14 from eve.common.script.sys import idCheckers 15 RADIAL_MENU_EXPAND_DELAY_MIN = 0 16 RADIAL_MENU_EXPAND_DELAY_MAX = 450 17 RADIAL_MENU_EXPAND_DELAY_DEFAULT = 150 18 19 class RadialMenuSvc(service.Service): 20 __guid__ = 'svc.radialmenu' 21 __startupdependencies__ = ['command_blocker'] 22 23 def Run(self, memStream = None): 24 self.expandTimer = None 25 26 def _ClampActionMenuExpandTime(self, expandTime): 27 if expandTime > RADIAL_MENU_EXPAND_DELAY_MAX: 28 settings.user.ui.Set('actionMenuExpandTime', RADIAL_MENU_EXPAND_DELAY_MAX) 29 elif expandTime < RADIAL_MENU_EXPAND_DELAY_MIN: 30 settings.user.ui.Set('actionMenuExpandTime', RADIAL_MENU_EXPAND_DELAY_MIN) 31 32 def TryExpandActionMenu(self, itemID, clickedObject, *args, **kwargs): 33 if self.command_blocker.is_blocked(['radialmenu', 'radialmenu.expand']): 34 return 0 35 if uicore.uilib.Key(uiconst.VK_MENU) or uicore.uilib.Key(uiconst.VK_CONTROL): 36 return 0 37 isRadialMenuButtonActive = spaceRadialMenuFunctions.IsRadialMenuButtonActive() 38 if not isRadialMenuButtonActive: 39 return 0 40 x = uicore.uilib.x 41 y = uicore.uilib.y 42 expandTime = settings.user.ui.Get('actionMenuExpandTime', RADIAL_MENU_EXPAND_DELAY_DEFAULT) 43 self._ClampActionMenuExpandTime(expandTime) 44 menuType = NORMAL_RADIAL_MENU 45 noDelay = False 46 combatCmdLoaded = uicore.cmd.combatCmdLoaded 47 if combatCmdLoaded: 48 if combatCmdLoaded.name == 'CmdOpenBroadcastRadialMenu': 49 menuType = BROADCAST_RADIAL_MENU 50 noDelay = True 51 elif combatCmdLoaded.name == 'CmdOpenRadialMenu': 52 noDelay = True 53 elif isRadialMenuButtonActive == BROADCAST_RADIAL_MENU: 54 menuType = BROADCAST_RADIAL_MENU 55 if noDelay or not expandTime: 56 uthread.new(self._TryExpandActionMenu, itemID, x, y, clickedObject, menuType, **kwargs) 57 else: 58 self.expandTimer = timerstuff.AutoTimer(int(expandTime), self._TryExpandActionMenu, itemID, x, y, clickedObject, menuType, **kwargs) 59 return 1 60 61 def _TryExpandActionMenu(self, itemID, x, y, clickedObject, menuType = NORMAL_RADIAL_MENU, **kwargs): 62 if getattr(clickedObject, 'isDragObject', False): 63 if x != uicore.uilib.x or y != uicore.uilib.y: 64 return 65 self.expandTimer = None 66 if clickedObject.destroyed: 67 return 68 v = geo2.Vector(uicore.uilib.x - x, uicore.uilib.y - y) 69 if int(geo2.Vec2Length(v) > 12): 70 return 71 self.ExpandActionMenu(itemID, x, y, clickedObject, menuType, **kwargs) 72 73 def ExpandActionMenu(self, itemID, x, y, clickedObject, menuType = NORMAL_RADIAL_MENU, **kwargs): 74 slimItem = None 75 if idCheckers.IsCharacter(itemID): 76 kwargs['charID'] = itemID 77 slimItem = SlimItemFromCharID(itemID) 78 if slimItem: 79 itemID = slimItem.itemID 80 elif not itemID and 'bookmarkInfo' in kwargs: 81 bookmarkInfo = kwargs['bookmarkInfo'] 82 bookmkarkItemID = getattr(bookmarkInfo, 'itemID', None) 83 if bookmkarkItemID: 84 slimItem = uix.GetBallparkRecord(bookmkarkItemID) 85 else: 86 slimItem = uix.GetBallparkRecord(itemID) 87 isRadialMenuButtonActive = spaceRadialMenuFunctions.IsRadialMenuButtonActive() 88 if not isRadialMenuButtonActive: 89 return 90 uicore.layer.menu.Flush() 91 uicore.uilib.tooltipHandler.CloseTooltip() 92 if menuType == BROADCAST_RADIAL_MENU: 93 radialMenuClass = RadialMenuBroadcast 94 else: 95 radialMenuClass = kwargs.get('radialMenuClass', RadialMenuSpace) 96 radialMenu = radialMenuClass(name='radialMenu', parent=uicore.layer.menu, state=uiconst.UI_HIDDEN, align=uiconst.TOPLEFT, updateDisplayName=True, slimItem=slimItem, itemID=itemID, x=x, y=y, clickedObject=clickedObject, **kwargs) 97 uicore.layer.menu.radialMenu = radialMenu 98 uicore.uilib.SetMouseCapture(radialMenu) 99 isRadialMenuButtonActive = spaceRadialMenuFunctions.IsRadialMenuButtonActive() 100 if not isRadialMenuButtonActive: 101 radialMenu.Close() 102 return 103 sm.StartService('stateSvc').SetState(itemID, state.mouseOver, 0) 104 radialMenu.state = uiconst.UI_NORMAL 105 sm.ScatterEvent('OnRadialMenuExpanded') 106 107 def GetRadialMenuOwner(self): 108 radialMenu = getattr(uicore.layer.menu, 'radialMenu', None) 109 if radialMenu and not radialMenu.destroyed: 110 radialMenuOwner = getattr(radialMenu, 'clickedObject', None) 111 if radialMenuOwner and not radialMenuOwner.destroyed: 112 return radialMenuOwner