Fixed some drag and drop issues on windows

preferencesAboutTextFull
unknown 13 years ago
parent 74162fafda
commit 483520cf2f
  1. 14
      src/core/UBApplication.cpp
  2. 13
      src/gui/UBLibPathViewer.cpp
  3. 1
      src/gui/UBLibPathViewer.h
  4. 29
      src/gui/UBLibraryWidget.cpp

@ -643,14 +643,19 @@ QString UBApplication::globalStyleSheet()
QString UBApplication::urlFromHtml(QString html) QString UBApplication::urlFromHtml(QString html)
{ {
QString url; QString _html;
QRegExp comments("\\<![ \r\n\t]*(--([^\\-]|[\r\n]|-[^\\-])*--[ \r\n\t]*)\\>");
QString url;
QDomDocument domDoc; QDomDocument domDoc;
domDoc.setContent(html.remove(QRegExp("[\\0]")));
// We remove all the comments & CRLF of this html
_html = html.remove(comments);
domDoc.setContent(_html.remove(QRegExp("[\\0]")));
QDomElement rootElem = domDoc.documentElement(); QDomElement rootElem = domDoc.documentElement();
// QUICKFIX: Here we have to check rootElem. Sometimes it can be a <meta> tag // QUICKFIX: Here we have to check rootElem. Sometimes it can be a <meta> tag
// In such a case we will not be able to retrieve the src value // In such a case we will not be able to retrieve the src value
if(rootElem.tagName().toLower().contains("meta")){ if(rootElem.tagName().toLower().contains("meta")){
qDebug() << rootElem.firstChildElement().tagName(); qDebug() << rootElem.firstChildElement().tagName();
// In that case we get the next element // In that case we get the next element
url = rootElem.firstChildElement().attribute("src"); url = rootElem.firstChildElement().attribute("src");
@ -658,8 +663,7 @@ QString UBApplication::urlFromHtml(QString html)
url = rootElem.attribute("src"); url = rootElem.attribute("src");
} }
qDebug() << "The URL is: " << url; return url;
return url;
} }
bool UBApplication::isFromWeb(QString url) bool UBApplication::isFromWeb(QString url)

@ -484,8 +484,6 @@ void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event)
QString sUrl = eachUrl.toString(); QString sUrl = eachUrl.toString();
if(!sUrl.startsWith("uniboardTool://") && !sUrl.startsWith("file://") && !sUrl.startsWith("/")){ if(!sUrl.startsWith("uniboardTool://") && !sUrl.startsWith("file://") && !sUrl.startsWith("/")){
// The dropped URL comes from the web // The dropped URL comes from the web
qDebug() << "Dropped url: " << sUrl;
// Show the download palette if it is hidden // Show the download palette if it is hidden
UBApplication::boardController->paletteManager()->startDownloads(); UBApplication::boardController->paletteManager()->startDownloads();
@ -499,10 +497,11 @@ void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event)
desc.totalSize = 0; desc.totalSize = 0;
desc.url = sUrl; desc.url = sUrl;
UBDownloadManager::downloadManager()->addFileToDownload(desc); UBDownloadManager::downloadManager()->addFileToDownload(desc);
bAccept = true;
} }
} }
bAccept = true; }
}else if(NULL != pMimeData && pMimeData->hasText()){ if(!bAccept && NULL != pMimeData && pMimeData->hasText()){
// The user can only drop an Url in this location so if the text is not an Url, // The user can only drop an Url in this location so if the text is not an Url,
// we discard it. // we discard it.
QString qsTxt = pMimeData->text().remove(QRegExp("[\\0]")); QString qsTxt = pMimeData->text().remove(QRegExp("[\\0]"));
@ -522,13 +521,12 @@ void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event)
UBDownloadManager::downloadManager()->addFileToDownload(desc); UBDownloadManager::downloadManager()->addFileToDownload(desc);
bAccept = true; bAccept = true;
} }
}else if(NULL != pMimeData && pMimeData->hasHtml()){ }
if(!bAccept && NULL != pMimeData && pMimeData->hasHtml()){
QString html = pMimeData->html(); QString html = pMimeData->html();
QString url = UBApplication::urlFromHtml(html); QString url = UBApplication::urlFromHtml(html);
if("" != url) if("" != url)
{ {
bAccept = true;
// Show the download palette if it is hidden // Show the download palette if it is hidden
UBApplication::boardController->paletteManager()->startDownloads(); UBApplication::boardController->paletteManager()->startDownloads();
@ -542,6 +540,7 @@ void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event)
desc.totalSize = 0; desc.totalSize = 0;
desc.url = url; desc.url = url;
UBDownloadManager::downloadManager()->addFileToDownload(desc); UBDownloadManager::downloadManager()->addFileToDownload(desc);
bAccept = true;
} }
} }
if(bAccept){ if(bAccept){

@ -70,6 +70,7 @@ private:
QTime mClickTime; QTime mClickTime;
/** A map between a widget and a chained element */ /** A map between a widget and a chained element */
QMap<QGraphicsWidget*, UBChainedLibElement*> mMapWidgetToChainedElem; QMap<QGraphicsWidget*, UBChainedLibElement*> mMapWidgetToChainedElem;
}; };
class UBLibPathViewer : public QGraphicsView class UBLibPathViewer : public QGraphicsView

@ -330,21 +330,17 @@ void UBLibraryWidget::onDropMe(const QMimeData *_data)
void UBLibraryWidget::dropEvent(QDropEvent *event) void UBLibraryWidget::dropEvent(QDropEvent *event)
{ {
const QMimeData* pMimeData = event->mimeData(); const QMimeData* pMimeData = event->mimeData();
if(event->source() == this) if(event->source() == this){
{
event->accept(); event->accept();
// Get the destination item // Get the destination item
UBLibElement* pElem = elementAt(event->pos()); UBLibElement* pElem = elementAt(event->pos());
if(NULL != pElem) if(NULL != pElem){
{ if(eUBLibElementType_Folder == pElem->type()){
if(eUBLibElementType_Folder == pElem->type())
{
// The drag comes from this application, we have now to get the list of UBLibElements* // The drag comes from this application, we have now to get the list of UBLibElements*
QList<QString> qlDroppedElems; QList<QString> qlDroppedElems;
foreach(QUrl url, pMimeData->urls()) foreach(QUrl url, pMimeData->urls()){
{
qlDroppedElems << url.toString(); qlDroppedElems << url.toString();
} }
@ -360,7 +356,6 @@ void UBLibraryWidget::dropEvent(QDropEvent *event)
// and if we want to display the download widget in order to make the user wait for the end of the download, we need // and if we want to display the download widget in order to make the user wait for the end of the download, we need
// to check the URLs first! // to check the URLs first!
if (pMimeData->hasUrls()){ if (pMimeData->hasUrls()){
qDebug() << "hasUrls";
QList<QUrl> urlList = pMimeData->urls(); QList<QUrl> urlList = pMimeData->urls();
for (int i = 0; i < urlList.size() && i < 32; ++i){ for (int i = 0; i < urlList.size() && i < 32; ++i){
QString filePath; QString filePath;
@ -382,20 +377,16 @@ void UBLibraryWidget::dropEvent(QDropEvent *event)
// When an HTML is present, it means that we dropped something from the web. Normally, the HTML contains the element // When an HTML is present, it means that we dropped something from the web. Normally, the HTML contains the element
// of the webpage and has a 'src' attribute containing the URL of the web ressource. Here we are looking for this // of the webpage and has a 'src' attribute containing the URL of the web ressource. Here we are looking for this
// 'src' attribute, get its value and download the ressource from this URL. // 'src' attribute, get its value and download the ressource from this URL.
else if (pMimeData->hasHtml()){ if (!bDropAccepted && pMimeData->hasHtml()){
qDebug() << "hasHtml";
QString html = pMimeData->html(); QString html = pMimeData->html();
qDebug() << html;
QString url = UBApplication::urlFromHtml(html); QString url = UBApplication::urlFromHtml(html);
if("" != url) if("" != url){
{
mLibraryController->importItemOnLibrary(url); mLibraryController->importItemOnLibrary(url);
bDropAccepted = true; bDropAccepted = true;
} }
} }
else if (pMimeData->hasText()){ if (!bDropAccepted && pMimeData->hasText()){
// On linux external dragged element are considered as text; // On linux external dragged element are considered as text;
qDebug() << "hasText: " << pMimeData->text();
QString filePath = QUrl(pMimeData->text()).toLocalFile(); QString filePath = QUrl(pMimeData->text()).toLocalFile();
if("" != filePath){ if("" != filePath){
mLibraryController->importItemOnLibrary(filePath); mLibraryController->importItemOnLibrary(filePath);
@ -415,15 +406,11 @@ void UBLibraryWidget::dropEvent(QDropEvent *event)
#endif #endif
} }
} }
else if (pMimeData->hasImage()){ if (!bDropAccepted && pMimeData->hasImage()){
qDebug() << "hasImage";
QImage image = qvariant_cast<QImage>(pMimeData->imageData()); QImage image = qvariant_cast<QImage>(pMimeData->imageData());
mLibraryController->importImageOnLibrary(image); mLibraryController->importImageOnLibrary(image);
bDropAccepted = true; bDropAccepted = true;
} }
else{
qWarning() << "Cannot import data";
}
if(bDropAccepted){ if(bDropAccepted){
onRefreshCurrentFolder(); onRefreshCurrentFolder();

Loading…
Cancel
Save