void PlayListView::mouseMoveEvent(QMouseEvent *event){ // // if not left button - return if (!(event->buttons() & Qt::LeftButton)) return; // if no item selected, return (else it would crash) if (currentItem() == NULL) return; QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; // construct list of QUrls // other widgets accept this mime type, we can drop to them QList<QUrl> list; QString line; line = currentItem()->text(0); // 0 == first Column of QTreeWidgetItem list.append( QUrl(line) ); // only QUrl in list will be text of actual item // mime stuff mimeData->setUrls(list); //mimeData->setData( line.toUtf8(), "text/uri-list" ); drag->setMimeData(mimeData); RG_DEBUG << "Starting drag from PlayListView::mouseMoveEvent() with mime : " << mimeData->formats() << " - " << mimeData->urls()[0] << endl; // start drag drag->start(Qt::CopyAction | Qt::MoveAction); }
void EventPresenter::handleDrop(const QPointF& pos, const QMimeData& mime) { // We don't want to create a new state in BaseScenario auto scenar = dynamic_cast<Scenario::ProcessModel*>(m_model.parent()); // todo Maybe the drop should be handled by the scenario presenter ?? or not // If the mime data has states in it we can handle it. if (scenar && mime.formats().contains(score::mime::messagelist())) { Mime<State::MessageList>::Deserializer des{mime}; State::MessageList ml = des.deserialize(); RedoMacroCommandDispatcher<Command::AddStateWithData> dispatcher{ score::IDocument::documentContext(m_model).commandStack}; auto cmd = new Command::CreateState{ *scenar, m_model.id(), pos.y() / m_view->parentItem()->boundingRect().size().height()}; dispatcher.submit(cmd); dispatcher.submit(new Command::AddMessagesToState{ scenar->states.at(cmd->createdState()), std::move(ml)}); dispatcher.commit(); } }
void tst_QMimeData::formats() const { QMimeData mimeData; // set text, verify mimeData.setData("text/plain", "pirates"); QCOMPARE(mimeData.formats(), QStringList() << "text/plain"); // set html, verify mimeData.setData("text/html", "ninjas"); QCOMPARE(mimeData.formats(), QStringList() << "text/plain" << "text/html"); // clear, verify mimeData.clear(); QCOMPARE(mimeData.formats(), QStringList()); // set an odd format, verify mimeData.setData("foo/bar", "somevalue"); QCOMPARE(mimeData.formats(), QStringList() << "foo/bar"); }
/* * This function is called when a standalone MimeData instance is passed as parameter to push() */ QMimeData *QQuickMimeData::toMimeData() { QMimeData *ret = m_mimeData; if (!m_refData) { m_mimeData = new QMimeData; // copy data so we keep the properties as they were Q_FOREACH(const QString &format, ret->formats()) { m_mimeData->setData(format, ret->data(format)); } // set teh color separately m_mimeData->setColorData(ret->colorData()); }
QVariantMap cloneData(const QMimeData &data) { QStringList formats; for ( const auto &mime : data.formats() ) { // ignore uppercase mimetypes (e.g. UTF8_STRING, TARGETS, TIMESTAMP) // and internal type to check clipboard owner if ( !mime.isEmpty() && mime[0].isLower() ) formats.append(mime); } return cloneData(data, formats); }
void ActionDialog::setInputData(const QMimeData &data) { delete m_data; m_data = cloneData(data); QString defaultFormat = ui->comboBoxInputFormat->currentText(); ui->comboBoxInputFormat->clear(); QStringList formats = QStringList() << standardFormats << data.formats(); formats.removeDuplicates(); ui->comboBoxInputFormat->addItems(formats); const int index = qMax(0, ui->comboBoxInputFormat->findText(defaultFormat)); ui->comboBoxInputFormat->setCurrentIndex(index); }
QMimeData* WGMergeProxy::mimeData(const QModelIndexList &indexes) const { QMimeData* data = new QMimeData(); for(const auto& index : indexes) { auto pair = mappingFromIndex(index); if(pair.first) { QMimeData* mimeData = pair.first->model_->mimeData({index}); for (auto& format : mimeData->formats()) { data->setData(format, mimeData->data(format)); } } } return data; }
QDebug operator<<(QDebug d, const QMimeData &m) { QDebug nospace = d.nospace(); const QStringList formats = m.formats(); nospace << "QMimeData: " << formats.join(QStringLiteral(", ")) << '\n' << " Text=" << m.hasText() << " HTML=" << m.hasHtml() << " Color=" << m.hasColor() << " Image=" << m.hasImage() << " URLs=" << m.hasUrls() << '\n'; if (m.hasText()) nospace << " Text: '" << m.text() << "'\n"; if (m.hasHtml()) nospace << " HTML: '" << m.html() << "'\n"; if (m.hasColor()) nospace << " Color: " << qvariant_cast<QColor>(m.colorData()) << '\n'; if (m.hasImage()) nospace << " Image: " << qvariant_cast<QImage>(m.imageData()).size() << '\n'; if (m.hasUrls()) nospace << " URLs: " << m.urls() << '\n'; return d; }
void DataDeviceManager::overrideSelection(const QMimeData &mimeData) { QStringList formats = mimeData.formats(); if (formats.isEmpty()) return; m_retainedData.clear(); foreach (const QString &format, formats) m_retainedData.setData(format, mimeData.data(format)); m_compositor->feedRetainedSelectionData(&m_retainedData); m_compositorOwnsSelection = true; InputDevice *dev = m_compositor->defaultInputDevice(); Surface *focusSurface = dev->keyboardFocus(); if (focusSurface) offerFromCompositorToClient( dev->dataDevice(focusSurface->base()->resource.client)->dataDeviceResource()); }
void DataDeviceManager::overrideSelection(const QMimeData &mimeData) { QStringList formats = mimeData.formats(); if (formats.isEmpty()) return; m_retainedData.clear(); foreach (const QString &format, formats) m_retainedData.setData(format, mimeData.data(format)); QWaylandCompositorPrivate::get(m_compositor)->feedRetainedSelectionData(&m_retainedData); m_compositorOwnsSelection = true; QWaylandSeat *dev = m_compositor->defaultSeat(); QWaylandSurface *focusSurface = dev->keyboardFocus(); if (focusSurface) offerFromCompositorToClient( QWaylandSeatPrivate::get(dev)->dataDevice()->resourceMap().value(focusSurface->waylandClient())->handle); }
NS_IMETHODIMP nsClipboard::SetNativeClipboardData( nsITransferable *aTransferable, QClipboard::Mode clipboardMode ) { if (nullptr == aTransferable) { NS_WARNING("nsClipboard::SetNativeClipboardData(): no transferable!"); return NS_ERROR_FAILURE; } // get flavor list that includes all flavors that can be written (including // ones obtained through conversion) nsCOMPtr<nsISupportsArray> flavorList; nsresult rv = aTransferable->FlavorsTransferableCanExport( getter_AddRefs(flavorList) ); if (NS_FAILED(rv)) { NS_WARNING("nsClipboard::SetNativeClipboardData(): no FlavorsTransferable !"); return NS_ERROR_FAILURE; } QClipboard *cb = QGuiApplication::clipboard(); QMimeData *mimeData = new QMimeData; uint32_t flavorCount = 0; flavorList->Count(&flavorCount); bool imageAdded = false; for (uint32_t i = 0; i < flavorCount; ++i) { nsCOMPtr<nsISupports> genericFlavor; flavorList->GetElementAt(i,getter_AddRefs(genericFlavor)); nsCOMPtr<nsISupportsCString> currentFlavor(do_QueryInterface(genericFlavor)); if (currentFlavor) { // flavorStr is the mime type nsXPIDLCString flavorStr; currentFlavor->ToString(getter_Copies(flavorStr)); // Clip is the data which will be sent to the clipboard nsCOMPtr<nsISupports> clip; // len is the length of the data uint32_t len; // Unicode text? if (!strcmp(flavorStr.get(), kUnicodeMime)) { rv = aTransferable->GetTransferData(flavorStr,getter_AddRefs(clip),&len); nsCOMPtr<nsISupportsString> wideString; wideString = do_QueryInterface(clip); if (!wideString || NS_FAILED(rv)) continue; nsAutoString utf16string; wideString->GetData(utf16string); QString str = QString::fromUtf16((const ushort*)utf16string.get()); // Add text to the mimeData mimeData->setText(str); } // html? else if (!strcmp(flavorStr.get(), kHTMLMime)) { rv = aTransferable->GetTransferData(flavorStr,getter_AddRefs(clip),&len); nsCOMPtr<nsISupportsString> wideString; wideString = do_QueryInterface(clip); if (!wideString || NS_FAILED(rv)) continue; nsAutoString utf16string; wideString->GetData(utf16string); QString str = QString::fromUtf16((const ushort*)utf16string.get()); // Add html to the mimeData mimeData->setHtml(str); } // image? else if (!imageAdded // image is added only once to the clipboard && (!strcmp(flavorStr.get(), kNativeImageMime) || !strcmp(flavorStr.get(), kPNGImageMime) || !strcmp(flavorStr.get(), kJPEGImageMime) || !strcmp(flavorStr.get(), kJPGImageMime) || !strcmp(flavorStr.get(), kGIFImageMime)) ) { // Look through our transfer data for the image static const char* const imageMimeTypes[] = { kNativeImageMime, kPNGImageMime, kJPEGImageMime, kJPGImageMime, kGIFImageMime }; nsCOMPtr<nsISupportsInterfacePointer> ptrPrimitive; for (uint32_t i = 0; !ptrPrimitive && i < ArrayLength(imageMimeTypes); i++) { aTransferable->GetTransferData(imageMimeTypes[i], getter_AddRefs(clip), &len); ptrPrimitive = do_QueryInterface(clip); } if (!ptrPrimitive) continue; nsCOMPtr<nsISupports> primitiveData; ptrPrimitive->GetData(getter_AddRefs(primitiveData)); nsCOMPtr<imgIContainer> image(do_QueryInterface(primitiveData)); if (!image) // Not getting an image for an image mime type!? continue; RefPtr<SourceSurface> surface = image->GetFrame(imgIContainer::FRAME_CURRENT, imgIContainer::FLAG_SYNC_DECODE); if (!surface) continue; RefPtr<DataSourceSurface> dataSurface = surface->GetDataSurface(); if (!dataSurface) continue; DataSourceSurface::MappedSurface map; if (!dataSurface->Map(DataSourceSurface::MapType::READ, &map)) continue; QImage qImage(map.mData, dataSurface->GetSize().width, dataSurface->GetSize().height, map.mStride, _moz2dformat_to_qformat(dataSurface->GetFormat())); dataSurface->Unmap(); // Add image to the mimeData mimeData->setImageData(qImage); imageAdded = true; } // Other flavors, adding data to clipboard "as is" else { rv = aTransferable->GetTransferData(flavorStr.get(), getter_AddRefs(clip), &len); // nothing found? if (!clip || NS_FAILED(rv)) continue; void *primitive_data = nullptr; nsPrimitiveHelpers::CreateDataFromPrimitive(flavorStr.get(), clip, &primitive_data, len); if (primitive_data) { QByteArray data ((const char *)primitive_data, len); // Add data to the mimeData mimeData->setData(flavorStr.get(), data); nsMemory::Free(primitive_data); } } } } // If we have some mime data, add it to the clipboard if(!mimeData->formats().isEmpty()) cb->setMimeData(mimeData, clipboardMode); else delete mimeData; return NS_OK; }