dropUtils.cpp 769 B

123456789101112131415161718192021222324252627282930313233
  1. #include <QMimeData>
  2. #include <QList>
  3. #include <QUrl>
  4. #include <qevent.h>
  5. #include "dropUtils.h"
  6. using namespace craftlab::fakeraid::ui;
  7. bool DropUtils::IsMimeTypeValidForDrop(const QMimeData* mimeData)
  8. {
  9. if (nullptr == mimeData || !mimeData->hasUrls())
  10. return false;
  11. const QList<QUrl> urls = mimeData->urls();
  12. auto isInvalidUrl = [](const QUrl& url) {
  13. return !url.isLocalFile();
  14. };
  15. return !std::any_of(urls.begin(), urls.end(), isInvalidUrl) || urls.isEmpty();
  16. }
  17. bool DropUtils::IsDropTargetValid(QDropEvent& e)
  18. {
  19. if (e.proposedAction() == Qt::CopyAction)
  20. ;
  21. else if (e.possibleActions() & Qt::CopyAction)
  22. e.setDropAction(Qt::CopyAction);
  23. else
  24. return false;
  25. if (!DropUtils::IsMimeTypeValidForDrop(e.mimeData()))
  26. return false;
  27. return true;
  28. }