class MIME(QObject): '''base MIME class''' def __init__(self, object=None, mime="application/x-default-mime"): self.MimeData = QMimeData() self.icon = QIcon() self.mime = mime self.setData(object) def setData(self, object): '''set MIME data''' self.data = object self._updateData() def setIcon(self, icon): '''set icon for MIME''' if isinstance(icon, QIcon): self.icon = icon elif isinstance(icon, str) or isinstance(icon, QString): self.icon = QIcon(icon) def _updateData(self): '''update mime data''' data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) stream << str(self.data) << self.icon self.MimeData.setData(self.mime, data)
def _newListDropEvent(self, event): if event.provides('mpd/uri'): event.accept() parent = self._newList() data = QMimeData() data.setData('mpd/uri', event.mimeData().data('mpd/uri')) def disconnect(item, row=-1, column=-1): if parent.row() == row: self.disconnect(self.playlistList.itemDelegate(parent), SIGNAL('commitData(QWidget *)'), addSongs) self.disconnect(self.playlistModel, SIGNAL('rowsAboutToBeRemoved(const QModelIndex &, int , int)'), disconnect) def addSongs(editor, data=data): # Make sure to disconnect from the signals. if parent.data(Qt.DisplayRole): disconnect(None, parent.row()) self.playlistModel.dropMimeData(data, Qt.CopyAction, 0, 0, parent) self.connect(self.playlistList.itemDelegate(parent), SIGNAL('commitData(QWidget *)'), addSongs) self.connect(self.playlistModel, SIGNAL('rowsAboutToBeRemoved(const QModelIndex &, int , int)'), disconnect)
def __onDragStarted(self, index): desc = index.data(QtWidgetRegistry.WIDGET_DESC_ROLE) icon = index.data(Qt.DecorationRole) drag_data = QMimeData() drag_data.setData( "application/vnv.orange-canvas.registry.qualified-name", desc.qualified_name.encode('utf-8')) drag = QDrag(self) drag.setPixmap(icon.pixmap(38)) drag.setMimeData(drag_data) # TODO: Should animate (accept) hide. self.hide() # When a drag is started and the menu hidden the item's tool tip # can still show for a short time UNDER the cursor preventing a # drop. viewport = self.__menu.view().viewport() filter = ToolTipEventFilter() viewport.installEventFilter(filter) drag.exec_(Qt.CopyAction) viewport.removeEventFilter(filter)
def startDrag(self, dropAction): """ Start drag @param dropAction: @type dropAction: """ indexes = self.selectedIndexes() if not indexes: return for index in indexes: if not index.isValid(): return rowVal = self.model.getValueRow(indexes[0]) if len(rowVal) > 1: meta = QByteArray() if self.datasetView: meta.append("__%s__" % rowVal['name']) else: meta.append("agent('%s')" % rowVal['name']) # create mime data object mime = QMimeData() mime.setData('application/x-%s-agent-item' % self.__acronym, meta) # start drag drag = QDrag(self) drag.setMimeData(mime) drag.exec_(Qt.CopyAction)
def mimeData(self, indexes): nodes = dedupe(index.internalPointer() for index in indexes) paths = [str(self.name + node.ref.path) for node in nodes] data = '\n'.join(paths).encode('utf-8') mimeData = QMimeData() mimeData.setData(MIME_PATHS, QByteArray(data)) return mimeData
def eventFilter( self, object, event ): if event.type() == event.MouseButtonPress: if self.isLocked(): return False if event.button() == Qt.MidButton or \ (event.button() == Qt.LeftButton and \ event.modifiers() == Qt.ShiftModifier): index = self.tabBar().tabAt(event.pos()) view = self.widget(index) pixmap = QPixmap.grabWidget(view) drag = QDrag(self) data = QMimeData() data.setText('move view:{}'.format(index)) drag.setMimeData(data) drag.setPixmap(pixmap) drag.exec_() return True return False elif event.type() == event.DragEnter: if ( str(event.mimeData().text()).startswith('move view:') and event.source() != self ): event.acceptProposedAction() return True elif event.type() == event.Drop: text = str(event.mimeData().text()) splt = text.split(':') self.snagViewFromPanel(event.source(), int(splt[1])) return True return False
def mousePressEvent(self, event): # handle an internal move # start a drag event if event.button() == Qt.LeftButton and self.dragDropRect().contains( event.pos()): # create the pixmap pixmap = QPixmap.grabWidget(self, self.rect()) # create the mimedata mimeData = QMimeData() mimeData.setText('ItemTitle::%s' % (self.title())) # create the drag drag = QDrag(self) drag.setMimeData(mimeData) drag.setPixmap(pixmap) drag.setHotSpot(event.pos()) if not drag.exec_(): self._accordianWidget.emitItemDragFailed(self) event.accept() # determine if the expand/collapse should occur elif event.button() == Qt.LeftButton and self.expandCollapseRect( ).contains(event.pos()): self._clicked = True event.accept() else: event.ignore()
def startDrag(self, dropActions): """Reimplement Qt Method - handle drag event""" mimeData = QMimeData() mimeData.setText(self.get_filename()) drag = QDrag(self) drag.setMimeData(mimeData) drag.exec_()
def copyCurrentCell(self): index = self.currentIndex() if index.isValid(): carrier = QMimeData() dataAsText = self.model().data(index, Qt.DisplayRole) carrier.setText(dataAsText.toString() if dataAsText else '') QtGui.qApp.clipboard().setMimeData(carrier)
def mimeData(self, indexes): items = (index.internalPointer() for index in indexes if index.isValid()) uri_list = self._getURIs(items) uri_list.sort() data = QMimeData() data.setData('mpd/uri', pickle.dumps(uri_list)) return data
def startDrag(self, dropActions): """Reimplement Qt Method - handle drag event""" data = QMimeData() data.setUrls([QUrl(fname) for fname in self.get_selected_filenames()]) drag = QDrag(self) drag.setMimeData(data) drag.exec_()
def mousePressEvent( self, event ): # handle an internal move from PyQt4.QtCore import Qt # start a drag event if ( event.button() == Qt.LeftButton and self.dragDropRect().contains( event.pos() ) ): from PyQt4.QtCore import QMimeData from PyQt4.QtGui import QDrag, QPixmap # create the pixmap pixmap = QPixmap.grabWidget( self, self.rect() ) # create the mimedata mimeData = QMimeData() mimeData.setText( 'ItemTitle::%s' % (self.title()) ) # create the drag drag = QDrag(self) drag.setMimeData( mimeData ) drag.setPixmap( pixmap ) drag.setHotSpot( event.pos() ) if ( not drag.exec_() ): self._accordianWidget.emitItemDragFailed(self) event.accept() # determine if the expand/collapse should occur elif ( event.button() == Qt.LeftButton and self.expandCollapseRect().contains( event.pos() ) ): self._clicked = True event.accept() else: event.ignore()
def __onDragStarted(self, index): desc = index.data(QtWidgetRegistry.WIDGET_DESC_ROLE) icon = index.data(Qt.DecorationRole) drag_data = QMimeData() drag_data.setData( "application/vnv.orange-canvas.registry.qualified-name", desc.qualified_name ) drag = QDrag(self) drag.setPixmap(icon.pixmap(38)) drag.setMimeData(drag_data) # TODO: Should animate (accept) hide. self.hide() # When a drag is started and the menu hidden the item's tool tip # can still show for a short time UNDER the cursor preventing a # drop. viewport = self.__menu.view().viewport() filter = ToolTipEventFilter() viewport.installEventFilter(filter) drag.exec_(Qt.CopyAction) viewport.removeEventFilter(filter)
def copy(self): dataList = self.prepareCopy() mimeData = QMimeData() for dataFormat, data in dataList.iteritems(): v = toVariant(data) mimeData.setData(dataFormat, v.toByteArray()) QtGui.qApp.clipboard().setMimeData(mimeData)
def startDrag(self, dropAction): """ Start drag @param dropAction: @type dropAction: """ indexes = self.selectedIndexes() if not indexes: return for index in indexes: if not index.isValid(): return rowVal = self.model.getValueRow( indexes[0] ) if len(rowVal) > 1 : if self.datasetView: meta = "__%s__" % rowVal['name'] else: meta = "agent('%s')" % rowVal['name'] # create mime data object mime = QMimeData() mime.setData('application/x-%s-agent-item' % Settings.instance().readValue( key='Common/acronym' ).lower() , meta ) # start drag ) drag = QDrag(self) drag.setMimeData(mime) drag.exec_(Qt.CopyAction)
def copy(self): """Copy to the clipboard""" data = QMimeData() text = "\n".join([cursor.selectedText() for cursor in self.cursors()]) data.setText(text) data.setData(self.MIME_TYPE, text.encode("utf8")) QApplication.clipboard().setMimeData(data)
def startDrag(self, dropAction): """ Start drag @param dropAction: @type dropAction: """ if self.datasetView: return # check indexes indexes = self.selectedIndexes() if not indexes: return for index in indexes: if not index.isValid(): return rowVal = self.model.getValueRow(indexes[0]) if len(rowVal) > 1: meta = QByteArray() meta.append("description('%s')" % rowVal['key']) # create mime data object mime = QMimeData() m = 'application/x-%s-description-item' % Settings.instance( ).readValue(key='Common/acronym').lower() mime.setData(m, meta) # start drag drag = QDrag(self) drag.setMimeData(mime) drag.exec_(Qt.CopyAction)
def mimeData(self, indexes ): """See QAbstractItemModel documentation""" if len(indexes) != 1: return 0 data = QMimeData() data.setData( self.mimeTypes()[0], QByteArray.number( indexes[0].row() ) ) return data
def startDrag(self, dropAction): # create mime data object mime = QMimeData() mime.setData('text/xml', '???') # start drag drag = QDrag(self) drag.setMimeData(mime) drag.start(Qt.CopyAction | Qt.CopyAction)
def mimeData(self, indexes): sortedIndexes = sorted([index for index in indexes if index.isValid()], key=lambda index: index.row()) encodedData = '\n'.join(self.data(index, Qt.DisplayRole) for index in sortedIndexes) mimeData = QMimeData() mimeData.setData(self.Mimetype, encodedData) return mimeData
def _copy(self, index): doc = QTextDocument() doc.setHtml(index.data(Qt.DisplayRole).toString()) clipboard = QApplication.clipboard() richTextData = QMimeData() richTextData.setHtml(index.data(Qt.DisplayRole).toString()) richTextData.setText(doc.toPlainText()) clipboard.setMimeData(richTextData)
def mimeData(self, indexes): idList = set() for index in indexes: idList.add(forceString(self.idList()[index.row()])) mimeData = QMimeData() mimeData.setText(u','.join(idList)) return mimeData
def mimeData(self, indexes): if len(indexes) == 1: item = indexes[0].internalPointer() d = QMimeData() d.setData(variable.MIME_TYPE, item.uniqueName) return d else: return None
def mimeData(self, indexes): """See QAbstractItemModel documentation""" if len(indexes) != 1: return 0 data = QMimeData() data.setData(self.mimeTypes()[0], QByteArray.number(indexes[0].row())) return data
def mimeData(self, indexes): albums = (self._albums[index.row()] for index in indexes if index.isValid()) uri_list = [] for album in albums: uri_list.extend(song.file.absolute for song in album.songs) uri_list.sort() data = QMimeData() data.setData('mpd/uri', pickle.dumps(uri_list)) return data
def mimeData(self, items): mimeData = QMimeData() encodedData = QByteArray() stream = QDataStream(encodedData, QIODevice.WriteOnly) for item in items: id = item.data(Qt.UserRole) stream.writeInt(id) mimeData.setData('application/vnd.re-eat.recipe', encodedData) return mimeData
def __init__(self, tile=None, meld=None): assert bool(tile) != bool(meld) QMimeData.__init__(self) self.tile = tile self.meld = meld if self.tile: self.setText(tile.element) else: self.setText(meld.joined)
def mimeData(self, indexes): if len(indexes) == 0: return 0 index = indexes[0] card = self.list[index.row()] string = pickle.dumps(card) result = QMimeData() result.setData('application/x-QCard', string) return result
def mouseMoveEvent(self, event): if '_selected' in self.__dict__: mimeData = QMimeData() byteArray = QByteArray(self._label.text()) mimeData.setData(CoordinateButton.MIME_TYPE, byteArray) drag = QDrag(self) drag.setMimeData(mimeData) drag.start(Qt.CopyAction)
def startDrag(self,event): drag = QDrag(event.widget()) mimedata = QMimeData() liste = [] liste.append(QUrl( "veromix://source_output_index:"+str(int(self.index)) )) mimedata.setUrls(liste) drag.setMimeData(mimedata) #drag.setHotSpot(event.pos() - self.rect().topLeft()) dropAction = drag.start(Qt.MoveAction)
def dropMimeData(self, mime: QMimeData, action, row: int, column: int, parent: QModelIndex): LOG.debug('dropMimeData at row {}'.format(row)) if action == Qt.IgnoreAction: return True if mime.hasFormat('text/uri-list'): if mime.hasUrls(): LOG.debug('found urls in drop!') for qurl in mime.urls(): LOG.debug(qurl.path()) if qurl.isLocalFile(): path = qurl.path() self.doc.open_file( path) # FIXME: replace with a signal return True elif mime.hasFormat(self._mimetype): # unpickle the presentation information and re-insert it # b = base64.decodebytes(mime.text()) b = mime.data(self._mimetype) layer_set_len, insertion_info = pkl.loads(b) LOG.debug('dropped: {0!r:s}'.format(insertion_info)) count = len(insertion_info) if row == -1: row = len(self.doc) # append # FIXME: row=col=-1 implies drop-on-parent, which may mean replace or may mean append for composite layers # self.insertRows(row, count) # for i, presentation in enumerate(l): # self.setData(self.index(row+i, 0), presentation) order = list(range(layer_set_len)) inserted_row_numbers = [] # inserted_presentations = [] # delete_these_rows = [] insertion_point = row uuids = [] for old_row, presentation in reversed(sorted(insertion_info)): del order[old_row] if old_row < insertion_point: insertion_point -= 1 inserted_row_numbers.insert(0, old_row) uuids.append(presentation.uuid) # delete_these_rows.append(old_row if old_row<row else old_row+count) # inserted_presentations.append(presentation) order = order[:insertion_point] + inserted_row_numbers + order[ insertion_point:] LOG.debug('new order after drop {0!r:s}'.format(order)) self.select([]) self.doc.reorder_by_indices(order) # self.doc.insert_layer_prez(row, inserted_presentations) # LOG.debug('after insertion removing rows {0!r:s}'.format(delete_these_rows)) # for exrow in delete_these_rows: # self.doc.remove_layer_prez(exrow) # self.doc.didReorderLayers.emit(order) # FUTURE: not our business to be emitting on behalf of the document assert (count == len(insertion_info)) return True return False
def mimeData(self, indexes): ''' Encodes the data for the items in indexes in MIME types for drag and drop actions. ''' row_list = [index.row() for index in indexes] row_list.sort() if len(row_list) == 0: return 0 data = QMimeData() data.setData('mpd/playqueue_id', pickle.dumps([(row, int(self._songs[row].id)) for row in row_list])) data.setData('mpd/uri', pickle.dumps([self._songs[row].file.absolute for row in row_list])) return data
def dragFile(widget, filename, icon=None, dropactions=Qt.CopyAction): """Starts dragging the given local file from the widget.""" if icon is None or icon.isNull(): icon = QFileIconProvider().icon(QFileInfo(filename)) drag = QDrag(widget) data = QMimeData() data.setUrls([QUrl.fromLocalFile(filename)]) drag.setMimeData(data) drag.setPixmap(icon.pixmap(32)) drag.exec_(dropactions)
def dataCollector( tree, items ): data = QMimeData() actions = [] for item in items: actions.append(str(qt.unwrapVariant(item.data(0, Qt.UserRole)))) actionstr = ','.join(actions) data.setData('application/x-actions', QByteArray(actionstr)) return data
def dataCollector(tree, items): data = QMimeData() actions = [] for item in items: actions.append(str(qt.unwrapVariant(item.data(0, Qt.UserRole)))) actionstr = ','.join(actions) data.setData('application/x-actions', QByteArray(actionstr)) return data
def startDrag(self,event): drag = QDrag(event.widget()) drag.setPixmap(self.mute.icon().pixmap(self.size().height(),self.size().height())) mimedata = QMimeData() liste = [] liste.append(QUrl( "veromix://sink_index:"+str(int(self.index)) )) mimedata.setUrls(liste) drag.setMimeData(mimedata) #drag.setHotSpot(event.pos() - self.rect().topLeft()) dropAction = drag.start(Qt.MoveAction)
def mimeData(self, indexes): data = QMimeData() widgets = [] for index in indexes: widget = index.data(Qt.UserRole) widgets.append(widget) widgettext = roam.yaml.dump(widgets) bytes = QByteArray(widgettext) data.setData(self.mimeTypes()[0], bytes) return data
def mimeData(self, indexes): dataList = [] index = indexes[0] for index in indexes: path = self.pathForIndex(index) data = ','.join(map(str, path)) dataList.append(data) data = '|'.join(dataList) mimeData = QMimeData() mimeData.setData(MIME_NODEPATHS, QByteArray(data.encode())) return mimeData
def mimeData(self, items): """ Returns QMimeData for drag and drop. """ logging.debug(self.__class__.__name__ + ": mimeData()") mime = QMimeData() encodedData = QByteArray() for item in items: encodedData.append(item.text(0)) mime.setData(self.mimeType(), encodedData) return mime
def mimeData(self, indexes): lst = QgsMimeDataUtils.UriList for index in indexes: if index.isValid(): if index.type() == QgsDataItem.Project: mimeData = QMimeData() url = QUrl.fromLocalFile(index.path()) mimeData.setUrls([url]) return mimeData if index.type() == QgsDataItem.Layer: lst.append(QgsMimeDataUtils.Uri(index)) return QgsMimeDataUtils.encodeUriList(lst)
def mouseMoveEvent(self, evt): if not (evt.buttons()&Qt.LeftButton): return if (evt.pos()-self.__downPos).manhattanLength()<self.minDragDist: return D = QDrag(self) data = QMimeData() data.setData("application/x-internal", '') D.setMimeData(data) D.exec_(Qt.MoveAction)
def startDrag(self): image = self.image() data = QMimeData() data.setImageData(image) drag = QDrag(self) drag.setMimeData(data) if max(image.width(), image.height()) > 256: image = image.scaled(QSize(256, 256), Qt.KeepAspectRatio, Qt.SmoothTransformation) pixmap = QPixmap.fromImage(image) drag.setPixmap(pixmap) drag.setHotSpot(pixmap.rect().center()) drag.exec_(Qt.CopyAction)
def __startDrag(self, button): """ Start a drag from button """ action = button.defaultAction() desc = action.data() # Widget Description icon = action.icon() drag_data = QMimeData() drag_data.setData("application/vnv.orange-canvas.registry.qualified-name", desc.qualified_name.encode("utf-8")) drag = QDrag(button) drag.setPixmap(icon.pixmap(self.iconSize())) drag.setMimeData(drag_data) drag.exec_(Qt.CopyAction)
def mimeData(self, indexes): _mimeData = QMimeData() encodedData = QByteArray() stream = QDataStream(encodedData, QIODevice.WriteOnly) for index in indexes: if (index.isValid()): text = self.data(index, Qt.DisplayRole).toString() stream << text # 将数据放入QMimeData中 _mimeData.setData("application/vnd.text.list", encodedData) return _mimeData
def new_processUrls(self, mime, _old): urls = mime.urls() size = len(urls) if size == 1: return _old(self, mime) # LOG.debug("import %d urls" % size) newmime = QMimeData() newlink = "" for url in urls: url = url.toString() url = url.splitlines()[0] # LOG.debug("import %s" % url) newmime = QMimeData() link = self.editor.urlToLink(url) if link: newlink += link elif mime.hasImage(): # if we couldn't convert the url to a link and there's an # image on the clipboard (such as copy&paste from # google images in safari), use that instead return self._processImage(mime) else: newmime.setText(url) return newmime if newlink != "": newmime.setHtml(newlink) return newmime
def test_dropping_the_data_emits_the_signal(self): mw = self._get_one() self.assertEqual(mw.supportedDropActions(), Qt.CopyAction) self.assertIn('application/vnd.re-eat.recipe', mw.mimeTypes()) assert mw.viewport().acceptDrops() mw.recipeAdded = DummySignal() mimeData = QMimeData() encodedData = QByteArray() stream = QDataStream(encodedData, QIODevice.WriteOnly) stream.writeInt(1) stream.writeInt(2) mimeData.setData('application/vnd.re-eat.recipe', encodedData) mw.dropMimeData(0, mimeData, Qt.CopyAction) self.assertListEqual(mw.recipeAdded.received, [(1, mw.date, mw.index), (2, mw.date, mw.index)]) mw.recipeMoved = DummySignal() mimeData = QMimeData() encodedData = QByteArray() stream = QDataStream(encodedData, QIODevice.WriteOnly) stream.writeInt(42) stream.writeQVariant(datetime.date.today()) stream.writeInt(2) mimeData.setData('application/vnd.re-eat.meal_recipe', encodedData) mw.dropMimeData(0, mimeData, Qt.CopyAction) self.assertListEqual( mw.recipeMoved.received, [(42, datetime.date.today(), 2, mw.date, mw.index)])
def mouseMoveEvent(self, event): # Chequear que se esté presionando el botón derecho if not (event.buttons() and Qt.LeftButton): return # Verificar que sea una posición válida if ((event.pos() - self.drag_start_position).manhattanLength() < QApplication.startDragDistance()): return drag = QDrag(self) mime_data = QMimeData() # Establecer el contenido del widget como dato drag.setMimeData(mime_data) mime_data.setText(self.label2.text()) # Ejecutar la acción self.drop_action = drag.exec_(Qt.CopyAction | Qt.MoveAction)
def __startDrag(self, button): """ Start a drag from button """ action = button.defaultAction() desc = action.data() # Widget Description icon = action.icon() drag_data = QMimeData() drag_data.setData( "application/vnv.orange-canvas.registry.qualified-name", desc.qualified_name.encode("utf-8")) drag = QDrag(button) drag.setPixmap(icon.pixmap(self.iconSize())) drag.setMimeData(drag_data) drag.exec_(Qt.CopyAction)