void UBWidgetUniboardAPI::onDownloadFinished(bool pSuccess, sDownloadFileDesc desc, QByteArray pData) { //if widget recieves is waiting for this id then process if (!takeIDWidget(desc.id)) return; if (!pSuccess) { qDebug() << "can't download the whole data. An error occured"; return; } QString contentType = desc.contentTypeHeader; QString extention = UBFileSystemUtils::fileExtensionFromMimeType(contentType); if (!supportedTypeHeader(contentType)) { qDebug() << "actions for mime type" << contentType << "are not supported"; return; } QString objDir = getObjDir(); if (!QDir().exists(objDir)) { if (!QDir().mkpath(objDir)) { qDebug() << "can't create objects directory path. Check the permissions"; return; } } QString destFileName = objDir + QUuid::createUuid() + "." + extention; QFile destFile(destFileName); if (!destFile.open(QIODevice::WriteOnly)) { qDebug() << "can't open" << destFileName << "for wrighting"; return; } if (destFile.write(pData) == -1) { qDebug() << "can't implement data writing"; return; } QGraphicsView *tmpView = mGraphicsWidget->scene()->views().at(0); QPoint dropPoint(mGraphicsWidget->mapFromScene(tmpView->mapToScene(desc.dropPoint)).toPoint()); QMimeData dropMimeData; QString mimeText = createMimeText(true, contentType, destFileName); dropMimeData.setData(tMimeText, mimeText.toAscii()); destFile.close(); //To make js interpreter accept drop event we need to generate move event first. QDragMoveEvent pseudoMove(dropPoint, desc.dropActions, &dropMimeData, desc.dropMouseButtons, desc.dropModifiers); QApplication::sendEvent(mGraphicsWidget,&pseudoMove); QDropEvent readyEvent(dropPoint, desc.dropActions, &dropMimeData, desc.dropMouseButtons, desc.dropModifiers); //sending event to destination either it had been downloaded or not QApplication::sendEvent(mGraphicsWidget,&readyEvent); readyEvent.acceptProposedAction(); }
bool UBWidgetUniboardAPI::isDropableData(const QMimeData *pMimeData) const { QString fileName = QString(); if (pMimeData->hasHtml()) { fileName = UBApplication::urlFromHtml(pMimeData->html()); if (fileName.isEmpty()) return false; } else if (pMimeData->hasUrls()) { fileName = pMimeData->urls().at(0).toLocalFile(); if (fileName.isEmpty()) return false; } if (supportedTypeHeader(UBFileSystemUtils::mimeTypeFromFileName(fileName))) return true; return false; }
void UBWidgetUniboardAPI::ProcessDropEvent(QGraphicsSceneDragDropEvent *event) { const QMimeData *pMimeData = event->mimeData(); QString destFileName; QString contentType; bool downloaded = false; QGraphicsView *tmpView = mGraphicsWidget->scene()->views().at(0); QPoint dropPoint(mGraphicsWidget->mapFromScene(tmpView->mapToScene(event->pos().toPoint())).toPoint()); Qt::DropActions dropActions = event->possibleActions(); Qt::MouseButtons dropMouseButtons = event->buttons(); Qt::KeyboardModifiers dropModifiers = event->modifiers(); QMimeData *dropMimeData = new QMimeData; qDebug() << event->possibleActions(); if (pMimeData->hasHtml()) { //Dropping element from web browser QString qsHtml = pMimeData->html(); QString url = UBApplication::urlFromHtml(qsHtml); if(!url.isEmpty()) { QString str = "test string"; QMimeData mimeData; mimeData.setData(tMimeText, str.toAscii()); sDownloadFileDesc desc; desc.dest = sDownloadFileDesc::graphicsWidget; desc.modal = true; desc.srcUrl = url; desc.currentSize = 0; desc.name = QFileInfo(url).fileName(); desc.totalSize = 0; // The total size will be retrieved during the download desc.dropPoint = event->pos().toPoint(); //Passing pure event point. No modifications desc.dropActions = dropActions; desc.dropMouseButtons = dropMouseButtons; desc.dropModifiers = dropModifiers; registerIDWidget(UBDownloadManager::downloadManager()->addFileToDownload(desc)); } } else if (pMimeData->hasUrls()) { //Local file processing QUrl curUrl = pMimeData->urls().first(); QString sUrl = curUrl.toString(); if (sUrl.startsWith("file://") || sUrl.startsWith("/")) { QString fileName = curUrl.toLocalFile(); QString extention = UBFileSystemUtils::extension(fileName); contentType = UBFileSystemUtils::mimeTypeFromFileName(fileName); if (supportedTypeHeader(contentType)) { destFileName = getObjDir() + QUuid::createUuid().toString() + "." + extention; if (!UBFileSystemUtils::copyFile(fileName, destFileName)) { qDebug() << "can't copy from" << fileName << "to" << destFileName; return; } downloaded = true; } } } QString mimeText = createMimeText(downloaded, contentType, destFileName); // Ev-5.1 - CFA - 20140109 : correction drop RTE UBFeaturesController* c = UBApplication::boardController->paletteManager()->featuresWidget()->getFeaturesController(); if (c->getFeatureByFullPath(mGraphicsWidget->sourceUrl().toLocalFile()).getType() != FEATURE_RTE) dropMimeData->setData(tMimeText, mimeText.toAscii()); if (mGraphicsWidget->page() && mGraphicsWidget->page()->mainFrame()) { mGraphicsWidget ->page() ->mainFrame() ->evaluateJavaScript("if(widget && widget.ondrop) { widget.ondrop('" + destFileName + "', '" + contentType + "');}"); } event->setMimeData(dropMimeData); }
void UBWidgetUniboardAPI::ProcessDropEvent(QDropEvent *event) { const QMimeData *pMimeData = event->mimeData(); QString destFileName; QString contentType; bool downloaded = false; QGraphicsView *tmpView = mGraphicsWidget->scene()->views().at(0); QPoint dropPoint(mGraphicsWidget->mapFromScene(tmpView->mapToScene(event->pos())).toPoint()); Qt::DropActions dropActions = event->dropAction(); Qt::MouseButtons dropMouseButtons = event->mouseButtons(); Qt::KeyboardModifiers dropModifiers = event->keyboardModifiers(); QMimeData dropMimeData; if (pMimeData->hasHtml()) { //Dropping element from web browser QString qsHtml = pMimeData->html(); QString url = UBApplication::urlFromHtml(qsHtml); if(!url.isEmpty()) { QString str = "test string"; QMimeData mimeData; mimeData.setData(tMimeText, str.toAscii()); sDownloadFileDesc desc; desc.dest = sDownloadFileDesc::graphicsWidget; desc.modal = true; desc.url = url; desc.currentSize = 0; desc.name = QFileInfo(url).fileName(); desc.totalSize = 0; // The total size will be retrieved during the download desc.dropPoint = event->pos(); //Passing pure event point. No modifications desc.dropActions = dropActions; desc.dropMouseButtons = dropMouseButtons; desc.dropModifiers = dropModifiers; registerIDWidget(UBDownloadManager::downloadManager()->addFileToDownload(desc)); } } else if (pMimeData->hasUrls()) { //Local file processing QUrl curUrl = pMimeData->urls().first(); QString sUrl = curUrl.toString(); if (sUrl.startsWith("file://") || sUrl.startsWith("/")) { QString fileName = curUrl.toLocalFile(); QString extention = UBFileSystemUtils::extension(fileName); contentType = UBFileSystemUtils::mimeTypeFromFileName(fileName); if (supportedTypeHeader(contentType)) { destFileName = getObjDir() + QUuid::createUuid().toString() + "." + extention; if (!UBFileSystemUtils::copyFile(fileName, destFileName)) { qDebug() << "can't copy from" << fileName << "to" << destFileName; return; } downloaded = true; } } } qDebug() << destFileName; QString mimeText = createMimeText(downloaded, contentType, destFileName); dropMimeData.setData(tMimeText, mimeText.toAscii()); QDropEvent readyEvent(dropPoint, dropActions, &dropMimeData, dropMouseButtons, dropModifiers); //sending event to destination either it had been downloaded or not QApplication::sendEvent(mGraphicsWidget->widgetWebView(),&readyEvent); readyEvent.acceptProposedAction(); }