dragdrop.py (5197B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\primitives\dragdrop.py 2 import carbonui.const as uiconst 3 import uthread 4 5 class DragDropObject(object): 6 dragData = [] 7 _dragEnabled = False 8 _dragging = False 9 _lastOverObject = None 10 _dragMouseDown = None 11 Draggable_blockDrag = False 12 isDragObject = False 13 isDropLocation = False 14 15 def __init__(self): 16 object.__init__(self) 17 dragEvents = ['OnExternalDragInitiated', 'OnExternalDragEnded'] 18 if hasattr(self, '__notifyevents__') and self.__notifyevents__ is not None: 19 self.__notifyevents__.extend(dragEvents) 20 else: 21 self.__notifyevents__ = dragEvents 22 sm.RegisterNotify(self) 23 24 def MakeDragObject(self): 25 self.isDragObject = True 26 27 def MakeDropLocation(self): 28 self.isDropLocation = True 29 30 def EnableDrag(self): 31 self.Draggable_blockDrag = False 32 33 def DisableDrag(self): 34 self.Draggable_blockDrag = True 35 36 def IsDraggable(self): 37 return self.isDragObject and not self.Draggable_blockDrag 38 39 def IsBeingDragged(self): 40 return self._dragging 41 42 def GetDragData(self): 43 return self.dragData 44 45 def PrepareDrag(self, dragContainer, dragSource): 46 from eve.client.script.ui.util.eveOverrides import PrepareDrag_Override 47 return PrepareDrag_Override(dragContainer, dragSource) 48 49 def OnDragCanceled(self, dragSource, dragData): 50 pass 51 52 def OnEndDrag(self, dragSource, dropLocation, dragData): 53 pass 54 55 def VerifyDrag(self, dragDestination, dragData): 56 return True 57 58 def OnMouseDownDrag(self, *args): 59 from carbonui.uicore import uicore 60 if not uicore.IsDragging() and self.isDragObject: 61 self._dragMouseDown = (uicore.uilib.x, uicore.uilib.y) 62 self._dragEnabled = True 63 uicore.dragObject = None 64 65 def OnMouseMoveDrag(self, *args): 66 from carbonui.uicore import uicore 67 if uicore.IsDragging(): 68 if uicore.dragObject is not self and self.isDropLocation: 69 uthread.new(self.OnDragMove, uicore.dragObject, uicore.dragObject.dragData) 70 elif not self.IsBeingDragged() and self._dragEnabled and not self.Draggable_blockDrag and uicore.uilib.mouseTravel >= 6: 71 self._dragging = True 72 uthread.new(self._BeginDrag).context = 'DragObject::_BeginDrag' 73 74 def _BeginDrag(self): 75 dragData = self.GetDragData() 76 if not dragData: 77 self._dragEnabled = False 78 self._dragging = False 79 return 80 from carbonui.uicore import uicore 81 if uicore.uilib.GetMouseCapture() == self: 82 uicore.uilib.ReleaseCapture() 83 mouseExitArgs, mouseExitHandler = self.FindEventHandler('OnMouseExit') 84 if mouseExitHandler: 85 mouseExitHandler(*mouseExitArgs) 86 from carbonui.control.dragdrop.dragContainer import DragContainer 87 dragContainer = DragContainer(name='dragContainer', align=uiconst.ABSOLUTE, idx=0, pos=(0, 0, 32, 32), state=uiconst.UI_DISABLED, parent=uicore.layer.dragging, dragData=dragData) 88 self._DoDrag(dragContainer) 89 90 def _DoDrag(self, dragContainer): 91 if dragContainer.destroyed: 92 return 93 dragData = dragContainer.dragData 94 mouseOffset = self.PrepareDrag(dragContainer, self) 95 if self.destroyed: 96 return 97 from carbonui.uicore import uicore 98 uicore.dragObject = dragContainer 99 sm.ScatterEvent('OnExternalDragInitiated', self, dragData) 100 try: 101 dragContainer.InitiateDrag(mouseOffset) 102 finally: 103 dropLocation = uicore.uilib.mouseOver 104 sm.ScatterEvent('OnExternalDragEnded', self, dropLocation, dragData) 105 uicore.dragObject = None 106 107 if self._dragEnabled: 108 self._dragEnabled = False 109 self._dragging = False 110 self.KillDragContainer(dragContainer) 111 dropLocation = uicore.uilib.mouseOver 112 if dropLocation.isDropLocation and self.VerifyDrag(dropLocation, dragData) and dropLocation.VerifyDrop(self, dragData): 113 uthread.new(dropLocation.OnDropData, self, dragData) 114 else: 115 self.OnDragCanceled(self, dragData) 116 self.OnEndDrag(self, dropLocation, dragData) 117 118 def KillDragContainer(self, dragContainer): 119 from carbonui.uicore import uicore 120 uicore.layer.dragging.Flush() 121 122 def CancelDrag(self): 123 from carbonui.uicore import uicore 124 self._dragEnabled = False 125 self._dragging = None 126 uicore.dragObject = None 127 uicore.layer.dragging.Flush() 128 129 def OnDragMove(self, dragSource, dragData): 130 pass 131 132 def OnDragExit(self, dragSource, dragData): 133 pass 134 135 def OnDragEnter(self, dragSource, dragData): 136 pass 137 138 def OnDropData(self, dragSource, dragData): 139 pass 140 141 def VerifyDrop(self, dragSource, dragData): 142 return True 143 144 def OnExternalDragInitiated(self, dragSource, dragData): 145 pass 146 147 def OnExternalDragEnded(self, dragSource, dropLocation, dragData): 148 pass