Source code for glue.utils.qt.mixins
from __future__ import absolute_import, division, print_function
from glue.external.qt import QtGui
from glue.utils.qt.mime import PyMimeData
__all__ = ['GlueItemWidget']
[docs]class GlueItemWidget(object):
"""
A mixin for QtGui.QListWidget/GlueTreeWidget subclasses, that provides
drag+drop funtionality.
"""
# Implementation detail: QXXWidgetItems are unhashable in PySide,
# and cannot be used as dictionary keys. we hash on IDs instead
SUPPORTED_MIME_TYPE = None
def __init__(self, parent=None):
super(GlueItemWidget, self).__init__(parent)
self._mime_data = {}
self.setDragEnabled(True)
[docs] def mimeTypes(self):
"""
Return the list of MIME Types supported for this object.
"""
types = [self.SUPPORTED_MIME_TYPE]
return types
[docs] def mimeData(self, selected_items):
"""
Return a list of MIME data associated with the each selected item.
Parameters
----------
selected_items : list
A list of ``QtGui.QListWidgetItems`` or ``QtGui.QTreeWidgetItems`` instances
Returns
-------
result : list
A list of MIME objects
"""
try:
data = [self.get_data(i) for i in selected_items]
except KeyError:
data = None
result = PyMimeData(data, **{self.SUPPORTED_MIME_TYPE: data})
# apparent bug in pyside garbage collects custom mime
# data, and crashes. Save result here to avoid
self._mime = result
return result
[docs] def get_data(self, item):
"""
Convenience method to fetch the data associated with a ``QxxWidgetItem``.
"""
# return item.data(Qt.UserRole)
return self._mime_data[id(item)]
[docs] def set_data(self, item, data):
"""
Convenience method to set data associated with a ``QxxWidgetItem``.
"""
#item.setData(Qt.UserRole, data)
self._mime_data[id(item)] = data
@property
def data(self):
return self._mime_data