QmlDesigner: Move QDS mime types to constants

Also:
- Rename libraryresource to asset to match the assets view name.
- Replace the outdated "bauhaus" name with "qtdesignstudio".

Change-Id: I4cacfdc33c029431b1a7b906439dabc3d9a7ee26
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Mahmoud Badri
2022-05-10 20:31:05 +03:00
parent d4aa9eb0b7
commit 666a032840
8 changed files with 55 additions and 45 deletions

View File

@@ -87,7 +87,7 @@ bool AssetsLibraryWidget::eventFilter(QObject *obj, QEvent *event)
auto drag = new QDrag(this); auto drag = new QDrag(this);
drag->setPixmap(m_assetsIconProvider->requestPixmap(m_assetsToDrag[0], nullptr, {128, 128})); drag->setPixmap(m_assetsIconProvider->requestPixmap(m_assetsToDrag[0], nullptr, {128, 128}));
QMimeData *mimeData = new QMimeData; QMimeData *mimeData = new QMimeData;
mimeData->setData("application/vnd.bauhaus.libraryresource", m_assetsToDrag.join(',').toUtf8()); mimeData->setData(Constants::MIME_TYPE_ASSETS, m_assetsToDrag.join(',').toUtf8());
drag->setMimeData(mimeData); drag->setMimeData(mimeData);
drag->exec(); drag->exec();
drag->deleteLater(); drag->deleteLater();
@@ -307,25 +307,25 @@ QPair<QString, QByteArray> AssetsLibraryWidget::getAssetTypeAndData(const QStrin
if (!suffix.isEmpty()) { if (!suffix.isEmpty()) {
if (AssetsLibraryModel::supportedImageSuffixes().contains(suffix)) { if (AssetsLibraryModel::supportedImageSuffixes().contains(suffix)) {
// Data: Image format (suffix) // Data: Image format (suffix)
return {"application/vnd.bauhaus.libraryresource.image", suffix.toUtf8()}; return {Constants::MIME_TYPE_ASSET_IMAGE, suffix.toUtf8()};
} else if (AssetsLibraryModel::supportedFontSuffixes().contains(suffix)) { } else if (AssetsLibraryModel::supportedFontSuffixes().contains(suffix)) {
// Data: Font family name // Data: Font family name
QRawFont font(assetPath, 10); QRawFont font(assetPath, 10);
QString fontFamily = font.isValid() ? font.familyName() : ""; QString fontFamily = font.isValid() ? font.familyName() : "";
return {"application/vnd.bauhaus.libraryresource.font", fontFamily.toUtf8()}; return {Constants::MIME_TYPE_ASSET_FONT, fontFamily.toUtf8()};
} else if (AssetsLibraryModel::supportedShaderSuffixes().contains(suffix)) { } else if (AssetsLibraryModel::supportedShaderSuffixes().contains(suffix)) {
// Data: shader type, frament (f) or vertex (v) // Data: shader type, frament (f) or vertex (v)
return {"application/vnd.bauhaus.libraryresource.shader", return {Constants::MIME_TYPE_ASSET_SHADER,
AssetsLibraryModel::supportedFragmentShaderSuffixes().contains(suffix) ? "f" : "v"}; AssetsLibraryModel::supportedFragmentShaderSuffixes().contains(suffix) ? "f" : "v"};
} else if (AssetsLibraryModel::supportedAudioSuffixes().contains(suffix)) { } else if (AssetsLibraryModel::supportedAudioSuffixes().contains(suffix)) {
// No extra data for sounds // No extra data for sounds
return {"application/vnd.bauhaus.libraryresource.sound", {}}; return {Constants::MIME_TYPE_ASSET_SOUND, {}};
} else if (AssetsLibraryModel::supportedVideoSuffixes().contains(suffix)) { } else if (AssetsLibraryModel::supportedVideoSuffixes().contains(suffix)) {
// No extra data for videos // No extra data for videos
return {"application/vnd.bauhaus.libraryresource.video", {}}; return {Constants::MIME_TYPE_ASSET_VIDEO, {}};
} else if (AssetsLibraryModel::supportedTexture3DSuffixes().contains(suffix)) { } else if (AssetsLibraryModel::supportedTexture3DSuffixes().contains(suffix)) {
// Data: Image format (suffix) // Data: Image format (suffix)
return {"application/vnd.bauhaus.libraryresource.texture3d", suffix.toUtf8()}; return {Constants::MIME_TYPE_ASSET_TEXTURE3D, suffix.toUtf8()};
} }
} }
return {}; return {};

View File

@@ -169,7 +169,7 @@ void Edit3DCanvas::dragEnterEvent(QDragEnterEvent *e)
// Allow drop when there is no valid active scene, as the drop goes under the root node of // Allow drop when there is no valid active scene, as the drop goes under the root node of
// the document in that case. // the document in that case.
if (!node.isValid() || !ModelNode::isThisOrAncestorLocked(node)) { if (!node.isValid() || !ModelNode::isThisOrAncestorLocked(node)) {
QByteArray data = e->mimeData()->data(QStringLiteral("application/vnd.bauhaus.itemlibraryinfo")); QByteArray data = e->mimeData()->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO);
if (!data.isEmpty()) { if (!data.isEmpty()) {
QDataStream stream(data); QDataStream stream(data);
stream >> m_itemLibraryEntry; stream >> m_itemLibraryEntry;

View File

@@ -24,12 +24,12 @@
****************************************************************************/ ****************************************************************************/
#include "abstractformeditortool.h" #include "abstractformeditortool.h"
#include "assetslibrarywidget.h"
#include "formeditorscene.h"
#include "formeditorview.h" #include "formeditorview.h"
#include "formeditorwidget.h" #include "formeditorwidget.h"
#include "formeditorscene.h" #include "modelnodecontextmenu.h"
#include "assetslibrarywidget.h" #include "qmldesignerconstants.h"
#include <modelnodecontextmenu.h>
#include <QDebug> #include <QDebug>
#include <QGraphicsSceneDragDropEvent> #include <QGraphicsSceneDragDropEvent>
@@ -236,20 +236,20 @@ void AbstractFormEditorTool::dropEvent(const QList<QGraphicsItem*> &/*itemList*/
void AbstractFormEditorTool::dragEnterEvent(const QList<QGraphicsItem*> &itemList, QGraphicsSceneDragDropEvent *event) void AbstractFormEditorTool::dragEnterEvent(const QList<QGraphicsItem*> &itemList, QGraphicsSceneDragDropEvent *event)
{ {
bool hasValidAssets = false; bool hasValidAssets = false;
if (event->mimeData()->hasFormat("application/vnd.bauhaus.libraryresource")) { if (event->mimeData()->hasFormat(Constants::MIME_TYPE_ASSETS)) {
const QStringList assetPaths = QString::fromUtf8(event->mimeData() const QStringList assetPaths = QString::fromUtf8(event->mimeData()
->data("application/vnd.bauhaus.libraryresource")).split(","); ->data(Constants::MIME_TYPE_ASSETS)).split(',');
for (const QString &assetPath : assetPaths) { for (const QString &assetPath : assetPaths) {
QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first; QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first;
if (assetType == "application/vnd.bauhaus.libraryresource.image" if (assetType == Constants::MIME_TYPE_ASSET_IMAGE
|| assetType == "application/vnd.bauhaus.libraryresource.font") { || assetType == Constants::MIME_TYPE_ASSET_FONT) {
hasValidAssets = true; hasValidAssets = true;
break; break;
} }
} }
} }
if (event->mimeData()->hasFormat(QLatin1String("application/vnd.bauhaus.itemlibraryinfo")) || hasValidAssets) { if (event->mimeData()->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO) || hasValidAssets) {
event->accept(); event->accept();
view()->changeToDragTool(); view()->changeToDragTool();
view()->currentTool()->dragEnterEvent(itemList, event); view()->currentTool()->dragEnterEvent(itemList, event);

View File

@@ -31,6 +31,7 @@
#include <metainfo.h> #include <metainfo.h>
#include <nodehints.h> #include <nodehints.h>
#include <rewritingexception.h> #include <rewritingexception.h>
#include "qmldesignerconstants.h"
#include <QDebug> #include <QDebug>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
@@ -219,9 +220,7 @@ void DragTool::abort()
static ItemLibraryEntry itemLibraryEntryFromMimeData(const QMimeData *mimeData) static ItemLibraryEntry itemLibraryEntryFromMimeData(const QMimeData *mimeData)
{ {
QByteArray data = mimeData->data(QStringLiteral("application/vnd.bauhaus.itemlibraryinfo")); QDataStream stream(mimeData->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO));
QDataStream stream(data);
ItemLibraryEntry itemLibraryEntry; ItemLibraryEntry itemLibraryEntry;
stream >> itemLibraryEntry; stream >> itemLibraryEntry;
@@ -236,7 +235,7 @@ static bool canBeDropped(const QMimeData *mimeData)
static bool hasItemLibraryInfo(const QMimeData *mimeData) static bool hasItemLibraryInfo(const QMimeData *mimeData)
{ {
return mimeData->hasFormat(QStringLiteral("application/vnd.bauhaus.itemlibraryinfo")); return mimeData->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO);
} }
void DragTool::dropEvent(const QList<QGraphicsItem *> &/*itemList*/, QGraphicsSceneDragDropEvent *event) void DragTool::dropEvent(const QList<QGraphicsItem *> &/*itemList*/, QGraphicsSceneDragDropEvent *event)
@@ -326,12 +325,12 @@ void DragTool::createDragNodes(const QMimeData *mimeData, const QPointF &scenePo
scenePosition); scenePosition);
} else { } else {
const QStringList assetPaths = QString::fromUtf8(mimeData const QStringList assetPaths = QString::fromUtf8(mimeData
->data("application/vnd.bauhaus.libraryresource")).split(","); ->data(Constants::MIME_TYPE_ASSETS)).split(',');
for (const QString &assetPath : assetPaths) { for (const QString &assetPath : assetPaths) {
QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first; QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first;
if (assetType == "application/vnd.bauhaus.libraryresource.image") if (assetType == Constants::MIME_TYPE_ASSET_IMAGE)
createQmlItemNodeFromImage(assetPath, targetContainerQmlItemNode, scenePosition); createQmlItemNodeFromImage(assetPath, targetContainerQmlItemNode, scenePosition);
else if (assetType == "application/vnd.bauhaus.libraryresource.font") else if (assetType == Constants::MIME_TYPE_ASSET_FONT)
createQmlItemNodeFromFont(assetPath, targetContainerQmlItemNode, scenePosition); createQmlItemNodeFromFont(assetPath, targetContainerQmlItemNode, scenePosition);
} }

View File

@@ -36,6 +36,7 @@
#include <nodemetainfo.h> #include <nodemetainfo.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/session.h> #include <projectexplorer/session.h>
#include "qmldesignerconstants.h"
#include "qmldesignerplugin.h" #include "qmldesignerplugin.h"
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
@@ -512,9 +513,9 @@ QMimeData *ItemLibraryModel::getMimeData(const ItemLibraryEntry &itemLibraryEntr
QByteArray data; QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly); QDataStream stream(&data, QIODevice::WriteOnly);
stream << itemLibraryEntry; stream << itemLibraryEntry;
mimeData->setData(QStringLiteral("application/vnd.bauhaus.itemlibraryinfo"), data); mimeData->setData(Constants::MIME_TYPE_ITEM_LIBRARY_INFO, data);
mimeData->removeFormat(QStringLiteral("text/plain")); mimeData->removeFormat("text/plain");
return mimeData; return mimeData;
} }

View File

@@ -71,7 +71,7 @@ namespace QmlDesigner {
static QList<ModelNode> modelNodesFromMimeData(const QMimeData *mineData, AbstractView *view) static QList<ModelNode> modelNodesFromMimeData(const QMimeData *mineData, AbstractView *view)
{ {
QByteArray encodedModelNodeData = mineData->data(QLatin1String("application/vnd.modelnode.list")); QByteArray encodedModelNodeData = mineData->data(Constants::MIME_TYPE_MODELNODE_LIST);
QDataStream modelNodeStream(&encodedModelNodeData, QIODevice::ReadOnly); QDataStream modelNodeStream(&encodedModelNodeData, QIODevice::ReadOnly);
QList<ModelNode> modelNodeList; QList<ModelNode> modelNodeList;
@@ -465,9 +465,9 @@ void NavigatorTreeModel::setView(NavigatorView *view)
QStringList NavigatorTreeModel::mimeTypes() const QStringList NavigatorTreeModel::mimeTypes() const
{ {
const static QStringList types({"application/vnd.modelnode.list", const static QStringList types({Constants::MIME_TYPE_MODELNODE_LIST,
"application/vnd.bauhaus.itemlibraryinfo", Constants::MIME_TYPE_ITEM_LIBRARY_INFO,
"application/vnd.bauhaus.libraryresource"}); Constants::MIME_TYPE_ASSETS});
return types; return types;
} }
@@ -490,7 +490,7 @@ QMimeData *NavigatorTreeModel::mimeData(const QModelIndexList &modelIndexList) c
} }
} }
mimeData->setData("application/vnd.modelnode.list", encodedModelNodeData); mimeData->setData(Constants::MIME_TYPE_MODELNODE_LIST, encodedModelNodeData);
return mimeData; return mimeData;
} }
@@ -560,10 +560,10 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
widget->setDragType(""); widget->setDragType("");
if (dropModelIndex.model() == this) { if (dropModelIndex.model() == this) {
if (mimeData->hasFormat("application/vnd.bauhaus.itemlibraryinfo")) { if (mimeData->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO)) {
handleItemLibraryItemDrop(mimeData, rowNumber, dropModelIndex); handleItemLibraryItemDrop(mimeData, rowNumber, dropModelIndex);
} else if (mimeData->hasFormat("application/vnd.bauhaus.libraryresource")) { } else if (mimeData->hasFormat(Constants::MIME_TYPE_ASSETS)) {
const QStringList assetsPaths = QString::fromUtf8(mimeData->data("application/vnd.bauhaus.libraryresource")).split(","); const QStringList assetsPaths = QString::fromUtf8(mimeData->data(Constants::MIME_TYPE_ASSETS)).split(',');
NodeAbstractProperty targetProperty; NodeAbstractProperty targetProperty;
const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0); const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0);
@@ -579,9 +579,9 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
QSet<QString> neededImports; QSet<QString> neededImports;
for (const QString &assetPath : assetsPaths) { for (const QString &assetPath : assetsPaths) {
QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first; QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first;
if (assetType == "application/vnd.bauhaus.libraryresource.shader") if (assetType == Constants::MIME_TYPE_ASSET_SHADER)
neededImports.insert("QtQuick3D"); neededImports.insert("QtQuick3D");
else if (assetType == "application/vnd.bauhaus.libraryresource.sound") else if (assetType == Constants::MIME_TYPE_ASSET_SOUND)
neededImports.insert("QtMultimedia"); neededImports.insert("QtMultimedia");
if (neededImports.size() == 2) if (neededImports.size() == 2)
@@ -598,20 +598,20 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
auto assetTypeAndData = AssetsLibraryWidget::getAssetTypeAndData(assetPath); auto assetTypeAndData = AssetsLibraryWidget::getAssetTypeAndData(assetPath);
QString assetType = assetTypeAndData.first; QString assetType = assetTypeAndData.first;
QString assetData = QString::fromUtf8(assetTypeAndData.second); QString assetData = QString::fromUtf8(assetTypeAndData.second);
if (assetType == "application/vnd.bauhaus.libraryresource.image") { if (assetType == Constants::MIME_TYPE_ASSET_IMAGE) {
currNode = handleItemLibraryImageDrop(assetPath, targetProperty, currNode = handleItemLibraryImageDrop(assetPath, targetProperty,
rowModelIndex, moveNodesAfter); rowModelIndex, moveNodesAfter);
} else if (assetType == "application/vnd.bauhaus.libraryresource.font") { } else if (assetType == Constants::MIME_TYPE_ASSET_FONT) {
currNode = handleItemLibraryFontDrop(assetData, // assetData is fontFamily currNode = handleItemLibraryFontDrop(assetData, // assetData is fontFamily
targetProperty, rowModelIndex); targetProperty, rowModelIndex);
} else if (assetType == "application/vnd.bauhaus.libraryresource.shader") { } else if (assetType == Constants::MIME_TYPE_ASSET_SHADER) {
currNode = handleItemLibraryShaderDrop(assetPath, assetData == "f", currNode = handleItemLibraryShaderDrop(assetPath, assetData == "f",
targetProperty, rowModelIndex, targetProperty, rowModelIndex,
moveNodesAfter); moveNodesAfter);
} else if (assetType == "application/vnd.bauhaus.libraryresource.sound") { } else if (assetType == Constants::MIME_TYPE_ASSET_SOUND) {
currNode = handleItemLibrarySoundDrop(assetPath, targetProperty, currNode = handleItemLibrarySoundDrop(assetPath, targetProperty,
rowModelIndex); rowModelIndex);
} else if (assetType == "application/vnd.bauhaus.libraryresource.texture3d") { } else if (assetType == Constants::MIME_TYPE_ASSET_TEXTURE3D) {
currNode = handleItemLibraryTexture3dDrop(assetPath, targetProperty, currNode = handleItemLibraryTexture3dDrop(assetPath, targetProperty,
rowModelIndex, moveNodesAfter); rowModelIndex, moveNodesAfter);
} }
@@ -627,7 +627,7 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
m_view->setSelectedModelNodes(addedNodes); m_view->setSelectedModelNodes(addedNodes);
} }
} }
} else if (mimeData->hasFormat("application/vnd.modelnode.list")) { } else if (mimeData->hasFormat(Constants::MIME_TYPE_MODELNODE_LIST)) {
handleInternalDrop(mimeData, rowNumber, dropModelIndex); handleInternalDrop(mimeData, rowNumber, dropModelIndex);
} }
} }
@@ -673,7 +673,7 @@ void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, in
NodeAbstractProperty targetProperty; NodeAbstractProperty targetProperty;
const ItemLibraryEntry itemLibraryEntry = const ItemLibraryEntry itemLibraryEntry =
createItemLibraryEntryFromMimeData(mimeData->data("application/vnd.bauhaus.itemlibraryinfo")); createItemLibraryEntryFromMimeData(mimeData->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO));
const NodeHints hints = NodeHints::fromItemLibraryEntry(itemLibraryEntry); const NodeHints hints = NodeHints::fromItemLibraryEntry(itemLibraryEntry);

View File

@@ -268,8 +268,8 @@ void NavigatorView::bindingPropertiesChanged(const QList<BindingProperty> & prop
void NavigatorView::dragStarted(QMimeData *mimeData) void NavigatorView::dragStarted(QMimeData *mimeData)
{ {
if (mimeData->hasFormat("application/vnd.bauhaus.itemlibraryinfo")) { if (mimeData->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO)) {
QByteArray data = mimeData->data("application/vnd.bauhaus.itemlibraryinfo"); QByteArray data = mimeData->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO);
QDataStream stream(data); QDataStream stream(data);
ItemLibraryEntry itemLibraryEntry; ItemLibraryEntry itemLibraryEntry;
stream >> itemLibraryEntry; stream >> itemLibraryEntry;

View File

@@ -85,6 +85,16 @@ const char QUICK_3D_ASSET_IMPORT_DATA_OPTIONS_KEY[] = "import_options";
const char QUICK_3D_ASSET_IMPORT_DATA_SOURCE_KEY[] = "source_scene"; const char QUICK_3D_ASSET_IMPORT_DATA_SOURCE_KEY[] = "source_scene";
const char DEFAULT_ASSET_IMPORT_FOLDER[] = "/asset_imports"; const char DEFAULT_ASSET_IMPORT_FOLDER[] = "/asset_imports";
const char MIME_TYPE_ITEM_LIBRARY_INFO[] = "application/vnd.qtdesignstudio.itemlibraryinfo";
const char MIME_TYPE_ASSETS[] = "application/vnd.qtdesignstudio.assets";
const char MIME_TYPE_ASSET_IMAGE[] = "application/vnd.qtdesignstudio.asset.image";
const char MIME_TYPE_ASSET_FONT[] = "application/vnd.qtdesignstudio.asset.font";
const char MIME_TYPE_ASSET_SHADER[] = "application/vnd.qtdesignstudio.asset.shader";
const char MIME_TYPE_ASSET_SOUND[] = "application/vnd.qtdesignstudio.asset.sound";
const char MIME_TYPE_ASSET_VIDEO[] = "application/vnd.qtdesignstudio.asset.video";
const char MIME_TYPE_ASSET_TEXTURE3D[] = "application/vnd.qtdesignstudio.asset.texture3d";
const char MIME_TYPE_MODELNODE_LIST[] = "application/vnd.qtdesignstudio.modelnode.list";
// Menus // Menus
const char M_VIEW_WORKSPACES[] = "QmlDesigner.Menu.View.Workspaces"; const char M_VIEW_WORKSPACES[] = "QmlDesigner.Menu.View.Workspaces";