forked from qt-creator/qt-creator
QmlDesigner: Allow dropping hdr/ktx assets to material editor
Also some tweaks in the same class and fixing few warnings. Fixes: QDS-9430 Change-Id: Ife19fb5f9ad67292882c339f1aa3255e91461cd1 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
@@ -3,49 +3,39 @@
|
||||
|
||||
#include "materialeditorview.h"
|
||||
|
||||
#include "asset.h"
|
||||
#include "bindingproperty.h"
|
||||
#include "auxiliarydataproperties.h"
|
||||
#include "designdocument.h"
|
||||
#include "designmodewidget.h"
|
||||
#include "dynamicpropertiesmodel.h"
|
||||
#include "itemlibraryinfo.h"
|
||||
#include "materialeditorqmlbackend.h"
|
||||
#include "materialeditorcontextobject.h"
|
||||
#include "materialeditordynamicpropertiesproxymodel.h"
|
||||
#include "propertyeditorvalue.h"
|
||||
#include "materialeditortransaction.h"
|
||||
#include "assetslibrarywidget.h"
|
||||
|
||||
#include <auxiliarydataproperties.h>
|
||||
#include <bindingproperty.h>
|
||||
#include <designdocument.h>
|
||||
#include <dynamicpropertiesmodel.h>
|
||||
#include <metainfo.h>
|
||||
#include <nodeinstanceview.h>
|
||||
#include <nodelistproperty.h>
|
||||
#include <nodemetainfo.h>
|
||||
#include <nodeproperty.h>
|
||||
#include <rewritingexception.h>
|
||||
#include <variantproperty.h>
|
||||
#include <qmldesignerconstants.h>
|
||||
#include <qmldesignerplugin.h>
|
||||
#include <qmltimeline.h>
|
||||
|
||||
#include <theme.h>
|
||||
#include "metainfo.h"
|
||||
#include "nodeinstanceview.h"
|
||||
#include "nodelistproperty.h"
|
||||
#include "nodemetainfo.h"
|
||||
#include "propertyeditorqmlbackend.h"
|
||||
#include "propertyeditorvalue.h"
|
||||
#include "qmldesignerconstants.h"
|
||||
#include "qmldesignerplugin.h"
|
||||
#include "qmltimeline.h"
|
||||
#include "variantproperty.h"
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <coreplugin/messagebox.h>
|
||||
#include <designmodewidget.h>
|
||||
#include <propertyeditorqmlbackend.h>
|
||||
#include <utils/environment.h>
|
||||
#include <utils/fileutils.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <qmldesignerplugin.h>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
#include <utils/environment.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QDir>
|
||||
#include <QFileInfo>
|
||||
#include <QQuickWidget>
|
||||
#include <QQuickItem>
|
||||
#include <QScopedPointer>
|
||||
#include <QStackedWidget>
|
||||
#include <QShortcut>
|
||||
#include <QTimer>
|
||||
#include <QColorDialog>
|
||||
|
||||
namespace QmlDesigner {
|
||||
@@ -74,8 +64,6 @@ MaterialEditorView::MaterialEditorView(ExternalDependenciesInterface &externalDe
|
||||
m_typeUpdateTimer.setInterval(500);
|
||||
connect(&m_typeUpdateTimer, &QTimer::timeout, this, &MaterialEditorView::updatePossibleTypes);
|
||||
|
||||
m_stackedWidget->setStyleSheet(Theme::replaceCssColors(
|
||||
QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"))));
|
||||
m_stackedWidget->setMinimumWidth(250);
|
||||
QmlDesignerPlugin::trackWidgetFocusTime(m_stackedWidget, Constants::EVENT_MATERIALEDITOR_TIME);
|
||||
|
||||
@@ -183,7 +171,7 @@ void MaterialEditorView::changeExpression(const QString &propertyName)
|
||||
if (name.isNull() || locked() || noValidSelection())
|
||||
return;
|
||||
|
||||
executeInTransaction("MaterialEditorView::changeExpression", [this, name] {
|
||||
executeInTransaction(__FUNCTION__, [this, name] {
|
||||
PropertyName underscoreName(name);
|
||||
underscoreName.replace('.', '_');
|
||||
|
||||
@@ -257,7 +245,7 @@ void MaterialEditorView::exportPropertyAsAlias(const QString &name)
|
||||
if (name.isNull() || locked() || noValidSelection())
|
||||
return;
|
||||
|
||||
executeInTransaction("MaterialEditorView::exportPopertyAsAlias", [this, name] {
|
||||
executeInTransaction(__FUNCTION__, [this, name] {
|
||||
const QString id = m_selectedMaterial.validId();
|
||||
QString upperCasePropertyName = name;
|
||||
upperCasePropertyName.replace(0, 1, upperCasePropertyName.at(0).toUpper());
|
||||
@@ -279,7 +267,7 @@ void MaterialEditorView::removeAliasExport(const QString &name)
|
||||
if (name.isNull() || locked() || noValidSelection())
|
||||
return;
|
||||
|
||||
executeInTransaction("MaterialEditorView::removeAliasExport", [this, name] {
|
||||
executeInTransaction(__FUNCTION__, [this, name] {
|
||||
const QString id = m_selectedMaterial.validId();
|
||||
|
||||
const QList<BindingProperty> bindingProps = rootModelNode().bindingProperties();
|
||||
@@ -392,7 +380,7 @@ void MaterialEditorView::applyMaterialToSelectedModels(const ModelNode &material
|
||||
return QString();
|
||||
};
|
||||
|
||||
executeInTransaction("MaterialEditorView::applyMaterialToSelectedModels", [&] {
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
for (const ModelNode &node : std::as_const(m_selectedModels)) {
|
||||
QmlObjectNode qmlObjNode(node);
|
||||
if (add) {
|
||||
@@ -425,7 +413,7 @@ void MaterialEditorView::handleToolBarAction(int action)
|
||||
case MaterialEditorContextObject::AddNewMaterial: {
|
||||
if (!model())
|
||||
break;
|
||||
executeInTransaction("MaterialEditorView:handleToolBarAction", [&] {
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
ModelNode matLib = materialLibraryNode();
|
||||
if (!matLib.isValid())
|
||||
return;
|
||||
@@ -455,7 +443,6 @@ void MaterialEditorView::handleToolBarAction(int action)
|
||||
|
||||
void MaterialEditorView::handlePreviewEnvChanged(const QString &envAndValue)
|
||||
{
|
||||
Q_UNUSED(envAndValue);
|
||||
if (envAndValue.isEmpty() || m_initializingPreviewData)
|
||||
return;
|
||||
|
||||
@@ -518,7 +505,6 @@ void MaterialEditorView::handlePreviewEnvChanged(const QString &envAndValue)
|
||||
|
||||
void MaterialEditorView::handlePreviewModelChanged(const QString &modelStr)
|
||||
{
|
||||
Q_UNUSED(modelStr);
|
||||
if (modelStr.isEmpty() || m_initializingPreviewData)
|
||||
return;
|
||||
|
||||
@@ -613,7 +599,7 @@ void MaterialEditorView::setupQmlBackend()
|
||||
void MaterialEditorView::commitVariantValueToModel(const PropertyName &propertyName, const QVariant &value)
|
||||
{
|
||||
m_locked = true;
|
||||
executeInTransaction("MaterialEditorView:commitVariantValueToModel", [&] {
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
QmlObjectNode(m_selectedMaterial).setVariantProperty(propertyName, value);
|
||||
});
|
||||
m_locked = false;
|
||||
@@ -641,7 +627,7 @@ void MaterialEditorView::commitAuxValueToModel(const PropertyName &propertyName,
|
||||
void MaterialEditorView::removePropertyFromModel(const PropertyName &propertyName)
|
||||
{
|
||||
m_locked = true;
|
||||
executeInTransaction("MaterialEditorView:removePropertyFromModel", [&] {
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
QmlObjectNode(m_selectedMaterial).removeProperty(propertyName);
|
||||
});
|
||||
m_locked = false;
|
||||
@@ -696,6 +682,7 @@ static Import entryToImport(const ItemLibraryEntry &entry)
|
||||
{
|
||||
if (entry.majorVersion() == -1 && entry.minorVersion() == -1)
|
||||
return Import::createFileImport(entry.requiredImport());
|
||||
|
||||
return Import::createLibraryImport(entry.requiredImport(),
|
||||
QString::number(entry.majorVersion()) + QLatin1Char('.') +
|
||||
QString::number(entry.minorVersion()));
|
||||
@@ -933,6 +920,7 @@ void MaterialEditorView::currentStateChanged(const ModelNode &node)
|
||||
{
|
||||
QmlModelState newQmlModelState(node);
|
||||
Q_ASSERT(newQmlModelState.isValid());
|
||||
|
||||
resetView();
|
||||
}
|
||||
|
||||
@@ -1006,7 +994,7 @@ void MaterialEditorView::renameMaterial(ModelNode &material, const QString &newN
|
||||
if (objName.isValid() && objName.toString() == newName)
|
||||
return;
|
||||
|
||||
executeInTransaction("MaterialEditorView:renameMaterial", [&] {
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
material.setIdWithRefactoring(model()->generateIdFromName(newName, "material"));
|
||||
|
||||
VariantProperty objNameProp = material.variantProperty("objectName");
|
||||
@@ -1039,7 +1027,8 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material)
|
||||
|
||||
// set name and id
|
||||
QString newName = sourceMat.modelNode().variantProperty("objectName").value().toString() + " copy";
|
||||
duplicateMatNode.variantProperty("objectName").setValue(newName);
|
||||
VariantProperty objNameProp = duplicateMatNode.variantProperty("objectName");
|
||||
objNameProp.setValue(newName);
|
||||
duplicateMatNode.setIdWithoutRefactoring(model()->generateIdFromName(newName, "material"));
|
||||
|
||||
// sync properties. Only the base state is duplicated.
|
||||
@@ -1052,15 +1041,15 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material)
|
||||
if (prop.isDynamic()) {
|
||||
dynamicProps.append(prop);
|
||||
} else {
|
||||
duplicateMatNode.variantProperty(prop.name())
|
||||
.setValue(prop.toVariantProperty().value());
|
||||
VariantProperty variantProp = duplicateMatNode.variantProperty(prop.name());
|
||||
variantProp.setValue(prop.toVariantProperty().value());
|
||||
}
|
||||
} else if (prop.isBindingProperty()) {
|
||||
if (prop.isDynamic()) {
|
||||
dynamicProps.append(prop);
|
||||
} else {
|
||||
duplicateMatNode.bindingProperty(prop.name())
|
||||
.setExpression(prop.toBindingProperty().expression());
|
||||
BindingProperty bindingProp = duplicateMatNode.bindingProperty(prop.name());
|
||||
bindingProp.setExpression(prop.toBindingProperty().expression());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1075,13 +1064,13 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material)
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
for (const AbstractProperty &prop : std::as_const(dynamicProps)) {
|
||||
if (prop.isVariantProperty()) {
|
||||
duplicateMatNode.variantProperty(prop.name())
|
||||
.setDynamicTypeNameAndValue(prop.dynamicTypeName(),
|
||||
prop.toVariantProperty().value());
|
||||
VariantProperty variantProp = duplicateMatNode.variantProperty(prop.name());
|
||||
variantProp.setDynamicTypeNameAndValue(prop.dynamicTypeName(),
|
||||
prop.toVariantProperty().value());
|
||||
} else if (prop.isBindingProperty()) {
|
||||
duplicateMatNode.bindingProperty(prop.name())
|
||||
.setDynamicTypeNameAndExpression(prop.dynamicTypeName(),
|
||||
prop.toBindingProperty().expression());
|
||||
BindingProperty bindingProp = duplicateMatNode.bindingProperty(prop.name());
|
||||
bindingProp.setDynamicTypeNameAndExpression(prop.dynamicTypeName(),
|
||||
prop.toBindingProperty().expression());
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1149,9 +1138,9 @@ void MaterialEditorView::dragStarted(QMimeData *mimeData)
|
||||
{
|
||||
if (mimeData->hasFormat(Constants::MIME_TYPE_ASSETS)) {
|
||||
const QString assetPath = QString::fromUtf8(mimeData->data(Constants::MIME_TYPE_ASSETS)).split(',')[0];
|
||||
QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first;
|
||||
Asset asset(assetPath);
|
||||
|
||||
if (assetType != Constants::MIME_TYPE_ASSET_IMAGE) // currently only image assets have dnd-supported properties
|
||||
if (!asset.isValidTextureSource()) // currently only image assets have dnd-supported properties
|
||||
return;
|
||||
|
||||
highlightSupportedProperties();
|
||||
|
@@ -3,23 +3,22 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <abstractview.h>
|
||||
#include <itemlibraryinfo.h>
|
||||
#include "abstractview.h"
|
||||
#include "modelnode.h"
|
||||
|
||||
#include <QHash>
|
||||
#include <QPointer>
|
||||
#include <QTimer>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QColorDialog;
|
||||
class QShortcut;
|
||||
class QStackedWidget;
|
||||
class QTimer;
|
||||
class QColorDialog;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class ModelNode;
|
||||
class ItemLibraryInfo;
|
||||
class MaterialEditorQmlBackend;
|
||||
|
||||
namespace Internal {
|
||||
|
Reference in New Issue
Block a user