From 73fb01f4b201f8b9cc4ff195c0068e5466e93712 Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Thu, 2 Dec 2021 13:18:02 +0100 Subject: [PATCH] QmlDesigner: Add support for video assets * Add *.mp3 as sound asset * Add *.mp4 as video asset Change-Id: If96bab257abf9d0264e374b5f1f92b807b5349a2 Reviewed-by: Mahmoud Badri Reviewed-by: Tim Jenssen --- .../componentcore/componentcore_constants.h | 1 + .../componentcore/designeractionmanager.cpp | 5 ++++- .../componentcore/modelnodeoperations.cpp | 5 +++++ .../componentcore/modelnodeoperations.h | 1 + .../itemlibrary/images/item-video-icon.png | Bin 0 -> 286 bytes .../itemlibrary/images/item-video-icon@2x.png | Bin 0 -> 399 bytes .../components/itemlibrary/itemlibrary.qrc | 2 ++ .../itemlibrary/itemlibraryassetsiconprovider.cpp | 2 ++ .../itemlibrary/itemlibraryassetsmodel.cpp | 9 ++++++++- .../itemlibrary/itemlibraryassetsmodel.h | 1 + .../components/itemlibrary/itemlibrarywidget.cpp | 3 +++ 11 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/item-video-icon.png create mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/item-video-icon@2x.png diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index 49505d2ca7d..6911ab27c7a 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -221,6 +221,7 @@ const int priorityLast = 60; const char addImagesDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Image Files"); const char addFontsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Font Files"); const char addSoundsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Sound Files"); +const char addVideosDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Video Files"); const char addShadersDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Shader Files"); const char add3DAssetsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "3D Assets"); const char addQt3DSPresentationsDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 13774c12651..4ac3692589d 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -1557,12 +1557,15 @@ void DesignerActionManager::createDefaultAddResourceHandler() registerHandlers({"*.otf", "*.ttf"}, ModelNodeOperations::addFontToProject, ComponentCoreConstants::addFontsDisplayString); - registerHandlers({"*.wav"}, + registerHandlers({"*.wav", "*.mp3"}, ModelNodeOperations::addSoundToProject, ComponentCoreConstants::addSoundsDisplayString); registerHandlers({"*.glsl", "*.glslv", "*.glslf", "*.vsh", "*.fsh", "*.vert", "*.frag"}, ModelNodeOperations::addShaderToProject, ComponentCoreConstants::addShadersDisplayString); + registerHandlers({"*.mp4"}, + ModelNodeOperations::addVideoToProject, + ComponentCoreConstants::addVideosDisplayString); } void DesignerActionManager::createDefaultModelNodePreviewImageHandlers() diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index b4867404954..02633df9f85 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -1077,6 +1077,11 @@ AddFilesResult addImageToProject(const QStringList &fileNames, const QString &de return addFilesToProject(fileNames, getAssetDefaultDirectory("images", defaultDirectory)); } +AddFilesResult addVideoToProject(const QStringList &fileNames, const QString &defaultDirectory) +{ + return addFilesToProject(fileNames, getAssetDefaultDirectory("videos", defaultDirectory)); +} + void createFlowActionArea(const SelectionContext &selectionContext) { AbstractView *view = selectionContext.view(); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h index feb7faa556f..f9e39c06f48 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h @@ -80,6 +80,7 @@ AddFilesResult addImageToProject(const QStringList &fileNames, const QString &di AddFilesResult addFontToProject(const QStringList &fileNames, const QString &directory); AddFilesResult addSoundToProject(const QStringList &fileNames, const QString &directory); AddFilesResult addShaderToProject(const QStringList &fileNames, const QString &directory); +AddFilesResult addVideoToProject(const QStringList &fileNames, const QString &directory); void createFlowActionArea(const SelectionContext &selectionContext); void addTransition(const SelectionContext &selectionState); void addFlowEffect(const SelectionContext &selectionState, const TypeName &typeName); diff --git a/src/plugins/qmldesigner/components/itemlibrary/images/item-video-icon.png b/src/plugins/qmldesigner/components/itemlibrary/images/item-video-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df1b84e5c99654bc885875e39a7db24db89f20b0 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoo_e}ChIn+oy}HoL#ZjdF zaUTMeiw<@guf*YG-ZN3QK>DBb;=+M4q4;Wsz?Y=0jr~GKq q^^T76IjL#v+yQ6zop~up{WcE3=E#GelF{r5}E*sDSRFP literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/components/itemlibrary/images/item-video-icon@2x.png b/src/plugins/qmldesigner/components/itemlibrary/images/item-video-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9f31faf390bcf63565bd4405cf088cd9c26c70 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_8UuVnTp1V`{{R2KV&H&& zMK&h`1A|sckY6wZ0}BVAps1LHl(ek2jh$y|c0pn3#7UE<&D_4@>Vt=mpFDs4_TBpr zfBycP8pD5yfq`MNr;B5V$MLsQJ^7m)B%HOm@*cEVE9kAb@&7-wt%sAr#D(gfGs=HY z+LxmDc7ZyR_7-Obx7kmQ%Fo%BTqArZ!re@Jar4nrM^%z-zh?@TPYeIlA?qt+_p{Px zl4a210!9XVExijq^7sCEI!dgQe|phn#hzWA4%!h9;}1oOKCugtRxgi=<1L)7RQS^= i{C?Q))KZrU=A+`5reqtLeqdl=VDNPHb6Mw<&;$SyR=YU> literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc index b1777bbbec6..c6d60413d07 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc @@ -33,5 +33,7 @@ images/x@2x.png images/browse.png images/browse@2x.png + images/item-video-icon.png + images/item-video-icon@2x.png diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsiconprovider.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsiconprovider.cpp index ece6e8abaab..ad6f3136837 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsiconprovider.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsiconprovider.cpp @@ -54,6 +54,8 @@ QPixmap ItemLibraryAssetsIconProvider::requestPixmap(const QString &id, QSize *s pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/ItemLibrary/images/asset_shader_48.png"); else if (ItemLibraryAssetsModel::supportedAudioSuffixes().contains(suffix)) pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/ItemLibrary/images/asset_sound_48.png"); + else if (ItemLibraryAssetsModel::supportedVideoSuffixes().contains(suffix)) + pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/ItemLibrary/images/item-video-icon.png"); if (size) { size->setWidth(pixmap.width()); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.cpp index caaaa374528..5fa13c3c16b 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.cpp @@ -167,7 +167,13 @@ const QStringList &ItemLibraryAssetsModel::supportedFontSuffixes() const QStringList &ItemLibraryAssetsModel::supportedAudioSuffixes() { - static const QStringList retList {"*.wav"}; + static const QStringList retList {"*.wav", "*.mp3"}; + return retList; +} + +const QStringList &ItemLibraryAssetsModel::supportedVideoSuffixes() +{ + static const QStringList retList {"*.mp4"}; return retList; } @@ -300,6 +306,7 @@ const QSet &ItemLibraryAssetsModel::supportedSuffixes() const insertSuffixes(supportedShaderSuffixes()); insertSuffixes(supportedFontSuffixes()); insertSuffixes(supportedAudioSuffixes()); + insertSuffixes(supportedVideoSuffixes()); insertSuffixes(supportedTexture3DSuffixes()); } return allSuffixes; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h index c1dcc845da0..f7621563492 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h @@ -66,6 +66,7 @@ public: static const QStringList &supportedShaderSuffixes(); static const QStringList &supportedFontSuffixes(); static const QStringList &supportedAudioSuffixes(); + static const QStringList &supportedVideoSuffixes(); static const QStringList &supportedTexture3DSuffixes(); const QSet &previewableSuffixes() const; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 4c02b25433b..c8720385c07 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -552,6 +552,9 @@ QPair ItemLibraryWidget::getAssetTypeAndData(const QString } else if (ItemLibraryAssetsModel::supportedAudioSuffixes().contains(suffix)) { // No extra data for sounds return {"application/vnd.bauhaus.libraryresource.sound", {}}; + } else if (ItemLibraryAssetsModel::supportedVideoSuffixes().contains(suffix)) { + // No extra data for videos + return {"application/vnd.bauhaus.libraryresource.video", {}}; } else if (ItemLibraryAssetsModel::supportedTexture3DSuffixes().contains(suffix)) { // Data: Image format (suffix) return {"application/vnd.bauhaus.libraryresource.texture3d", suffix.toUtf8()};