forked from qt-creator/qt-creator
QmlDesigner: Add import support for sounds and shaders
All imported asset types are now imported to type specific folders under the project, similar to what was already done for fonts. Also refactored import registration a bit to reduce code duplication. Fixes: QDS-3326 Change-Id: I2b321590a6339eae9859e9daf154341175842929 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -206,6 +206,8 @@ 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 addShadersDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Shader Files");
|
||||
|
||||
const char addCustomEffectDialogDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Add Custom Effect");
|
||||
|
||||
|
@@ -1388,28 +1388,26 @@ void DesignerActionManager::createDefaultDesignerActions()
|
||||
|
||||
void DesignerActionManager::createDefaultAddResourceHandler()
|
||||
{
|
||||
registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString,
|
||||
"*.png",
|
||||
ModelNodeOperations::addImageToProject));
|
||||
registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString,
|
||||
"*.jpg",
|
||||
ModelNodeOperations::addImageToProject));
|
||||
registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString,
|
||||
"*.bmp",
|
||||
ModelNodeOperations::addImageToProject));
|
||||
registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString,
|
||||
"*.svg",
|
||||
ModelNodeOperations::addImageToProject));
|
||||
registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString,
|
||||
"*.hdr",
|
||||
ModelNodeOperations::addImageToProject));
|
||||
auto registerHandlers = [this](const QStringList &exts, AddResourceOperation op,
|
||||
const QString &category) {
|
||||
for (const QString &ext : exts)
|
||||
registerAddResourceHandler(AddResourceHandler(category, ext, op));
|
||||
};
|
||||
|
||||
registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addFontsDisplayString,
|
||||
"*.ttf",
|
||||
ModelNodeOperations::addFontToProject));
|
||||
registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addFontsDisplayString,
|
||||
"*.otf",
|
||||
ModelNodeOperations::addFontToProject));
|
||||
// The filters will be displayed in reverse order to these lists in file dialog,
|
||||
// so declare most common types last
|
||||
registerHandlers({"*.webp", "*.hdr", "*.svg", "*.bmp", "*.jpg", "*.png"},
|
||||
ModelNodeOperations::addImageToProject,
|
||||
ComponentCoreConstants::addImagesDisplayString);
|
||||
registerHandlers({"*.otf", "*.ttf"},
|
||||
ModelNodeOperations::addFontToProject,
|
||||
ComponentCoreConstants::addFontsDisplayString);
|
||||
registerHandlers({"*.wav"},
|
||||
ModelNodeOperations::addSoundToProject,
|
||||
ComponentCoreConstants::addSoundsDisplayString);
|
||||
registerHandlers({"*.glsl", "*.glslv", "*.glslf", "*.vsh", "*.fsh", "*.vert", "*.frag"},
|
||||
ModelNodeOperations::addShaderToProject,
|
||||
ComponentCoreConstants::addShadersDisplayString);
|
||||
}
|
||||
|
||||
void DesignerActionManager::createDefaultModelNodePreviewImageHandlers()
|
||||
|
@@ -970,46 +970,7 @@ Utils::FilePath projectFilePath()
|
||||
return Utils::FilePath();
|
||||
}
|
||||
|
||||
bool addFontToProject(const QStringList &fileNames, const QString &defaultDirectory)
|
||||
{
|
||||
|
||||
QString adjustedDefaultDirectory = defaultDirectory;
|
||||
Utils::FilePath fonts = projectFilePath().pathAppended("fonts");
|
||||
|
||||
if (fonts.exists())
|
||||
adjustedDefaultDirectory = fonts.toString();
|
||||
|
||||
QString directory = AddImagesDialog::getDirectory(fileNames, adjustedDefaultDirectory);
|
||||
|
||||
if (directory.isEmpty())
|
||||
return true;
|
||||
|
||||
bool allSuccessful = true;
|
||||
for (const QString &fileName : fileNames) {
|
||||
const QString targetFile = directory + "/" + QFileInfo(fileName).fileName();
|
||||
const bool success = QFile::copy(fileName, targetFile);
|
||||
|
||||
auto document = QmlDesignerPlugin::instance()->currentDesignDocument();
|
||||
|
||||
QTC_ASSERT(document, return false);
|
||||
|
||||
if (success) {
|
||||
ProjectExplorer::Node *node = ProjectExplorer::ProjectTree::nodeForFile(document->fileName());
|
||||
if (node) {
|
||||
ProjectExplorer::FolderNode *containingFolder = node->parentFolderNode();
|
||||
if (containingFolder)
|
||||
containingFolder->addFiles(QStringList(targetFile));
|
||||
}
|
||||
} else {
|
||||
allSuccessful = false;
|
||||
}
|
||||
}
|
||||
|
||||
return allSuccessful;
|
||||
}
|
||||
|
||||
|
||||
bool addImageToProject(const QStringList &fileNames, const QString &defaultDirectory)
|
||||
static bool addFilesToProject(const QStringList &fileNames, const QString &defaultDirectory)
|
||||
{
|
||||
QString directory = AddImagesDialog::getDirectory(fileNames, defaultDirectory);
|
||||
|
||||
@@ -1040,6 +1001,43 @@ bool addImageToProject(const QStringList &fileNames, const QString &defaultDirec
|
||||
return allSuccessful;
|
||||
}
|
||||
|
||||
static QString getAssetDefaultDirectory(const QString &assetDir, const QString &defaultDirectory)
|
||||
{
|
||||
QString adjustedDefaultDirectory = defaultDirectory;
|
||||
Utils::FilePath assetPath = projectFilePath().pathAppended(assetDir);
|
||||
|
||||
if (!assetPath.exists()) {
|
||||
// Create the default asset type directory if it doesn't exist
|
||||
QDir dir(projectFilePath().toString());
|
||||
dir.mkpath(assetDir);
|
||||
}
|
||||
|
||||
if (assetPath.exists() && assetPath.isDir())
|
||||
adjustedDefaultDirectory = assetPath.toString();
|
||||
|
||||
return adjustedDefaultDirectory;
|
||||
}
|
||||
|
||||
bool addFontToProject(const QStringList &fileNames, const QString &defaultDirectory)
|
||||
{
|
||||
return addFilesToProject(fileNames, getAssetDefaultDirectory("fonts", defaultDirectory));
|
||||
}
|
||||
|
||||
bool addSoundToProject(const QStringList &fileNames, const QString &defaultDirectory)
|
||||
{
|
||||
return addFilesToProject(fileNames, getAssetDefaultDirectory("sounds", defaultDirectory));
|
||||
}
|
||||
|
||||
bool addShaderToProject(const QStringList &fileNames, const QString &defaultDirectory)
|
||||
{
|
||||
return addFilesToProject(fileNames, getAssetDefaultDirectory("shaders", defaultDirectory));
|
||||
}
|
||||
|
||||
bool addImageToProject(const QStringList &fileNames, const QString &defaultDirectory)
|
||||
{
|
||||
return addFilesToProject(fileNames, getAssetDefaultDirectory("images", defaultDirectory));
|
||||
}
|
||||
|
||||
void createFlowActionArea(const SelectionContext &selectionContext)
|
||||
{
|
||||
AbstractView *view = selectionContext.view();
|
||||
|
@@ -75,6 +75,8 @@ void decreaseIndexOfStackedContainer(const SelectionContext &selectionContext);
|
||||
void addTabBarToStackedContainer(const SelectionContext &selectionContext);
|
||||
bool addImageToProject(const QStringList &fileNames, const QString &directory);
|
||||
bool addFontToProject(const QStringList &fileNames, const QString &directory);
|
||||
bool addSoundToProject(const QStringList &fileNames, const QString &directory);
|
||||
bool addShaderToProject(const QStringList &fileNames, const QString &directory);
|
||||
void createFlowActionArea(const SelectionContext &selectionContext);
|
||||
void addTransition(const SelectionContext &selectionState);
|
||||
void addFlowEffect(const SelectionContext &selectionState, const TypeName &typeName);
|
||||
|
Reference in New Issue
Block a user