Example #1
0
 def _decode_rows_drag_mime_data(self, mime_data):
     """If mime_data contains packed ROWS_DRAG_MIME_TYPE mime data, it is unpacked into a list containing the source model
     and objects dragged, and this tuple is returned.  None is returned otherwise."""
     if mime_data.hasFormat(ROWS_DRAG_MIME_TYPE):
         d = mime_data.data(ROWS_DRAG_MIME_TYPE)
         ds = Qt.QDataStream(d, Qt.QIODevice.ReadOnly)
         rows = []
         src_model = ctypes.cast(ds.readUInt64(), ctypes.py_object).value
         while not ds.atEnd():
             rows.append(ds.readInt64())
         if rows:
             return RowsDrag(src_model, rows)
Example #2
0
 def mimeData(self, midxs):
     mime_data = super().mimeData(midxs)
     if mime_data is None:
         mime_data = Qt.QMimeData()
     d = Qt.QByteArray()
     ds = Qt.QDataStream(d, Qt.QIODevice.WriteOnly)
     ds.writeUInt64(id(self))
     # There is an midx for every column of the dragged row(s), but our ROW_DRAG_MIME_TYPE data should contain only one entry per row
     packed_rows = set()
     for midx in midxs:
         assert midx.isValid()
         row = midx.row()
         if row in packed_rows:
             continue
         packed_rows.add(row)
         ds.writeInt64(row)
     mime_data.setData(ROWS_DRAG_MIME_TYPE, d)
     return mime_data