/
drop_handler.py
52 lines (39 loc) · 1.77 KB
/
drop_handler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from pyface.i_drop_handler import IDropHandler
from traits.api import Callable, HasTraits, List, provides, Str
@provides(IDropHandler)
class BaseDropHandler(HasTraits):
""" Basic drop handler
"""
### BaseDropHandler interface #############################################
#: Returns True if the current drop handler can handle the given drag event
#: occurring on the given target widget.
on_can_handle = Callable
#: Performs drop action when drop event occurs on target widget.
on_handle = Callable
### IDropHandler interface ################################################
def can_handle_drop(self, event, target):
return self.on_can_handle(event, target)
def handle_drop(self, event, target):
return self.on_handle(event, target)
@provides(IDropHandler)
class FileDropHandler(HasTraits):
""" Class to handle backward compatible file drop events
"""
### FileDropHandler interface #############################################
#: supported extensions
extensions = List(Str)
#: Called when file is opened. Takes single argument: path of file
open_file = Callable
### IDropHandler interface ################################################
def can_handle_drop(self, event, target):
""" Does the drop event contails file data with matching extensions """
if event.mimeData().hasUrls():
for url in event.mimeData().urls():
file_path = url.toLocalFile()
if file_path.endswith(tuple(self.extensions)):
return True
return False
def handle_drop(self, event, target):
""" Open the file using the supplied callback """
for url in event.mimeData().urls():
self.open_file(url.toLocalFile())