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 53 54 55 56 57 58 59 60 61 62 63 64
|
# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
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())
|