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

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