forked from qt-creator/qt-creator
QmlDesigner: Disable apply material to selected when no selection exist
When there is no valid model selected, disable the "apply to selected" actions in the material editor and browser. Change-Id: Id8e771c64e69c0ba2f42dff01d19ffbf4afafb77 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -92,13 +92,13 @@ Item {
|
|||||||
|
|
||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Apply to selected (replace)")
|
text: qsTr("Apply to selected (replace)")
|
||||||
enabled: currentMaterial
|
enabled: currentMaterial && materialBrowserModel.hasModelSelection
|
||||||
onTriggered: materialBrowserModel.applyToSelected(currentMaterial.materialInternalId, false)
|
onTriggered: materialBrowserModel.applyToSelected(currentMaterial.materialInternalId, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Apply to selected (add)")
|
text: qsTr("Apply to selected (add)")
|
||||||
enabled: currentMaterial
|
enabled: currentMaterial && materialBrowserModel.hasModelSelection
|
||||||
onTriggered: materialBrowserModel.applyToSelected(currentMaterial.materialInternalId, true)
|
onTriggered: materialBrowserModel.applyToSelected(currentMaterial.materialInternalId, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -50,7 +50,7 @@ Rectangle {
|
|||||||
normalColor: "transparent"
|
normalColor: "transparent"
|
||||||
iconSize: StudioTheme.Values.bigIconFontSize
|
iconSize: StudioTheme.Values.bigIconFontSize
|
||||||
buttonSize: root.height
|
buttonSize: root.height
|
||||||
enabled: hasMaterial && hasQuick3DImport
|
enabled: hasMaterial && hasModelSelection && hasQuick3DImport
|
||||||
onClicked: root.toolBarAction(ToolBarAction.ApplyToSelected)
|
onClicked: root.toolBarAction(ToolBarAction.ApplyToSelected)
|
||||||
tooltip: qsTr("Apply material to selected model.")
|
tooltip: qsTr("Apply material to selected model.")
|
||||||
}
|
}
|
||||||
|
@@ -106,6 +106,20 @@ void MaterialBrowserModel::setHasQuick3DImport(bool b)
|
|||||||
emit hasQuick3DImportChanged();
|
emit hasQuick3DImportChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MaterialBrowserModel::hasModelSelection() const
|
||||||
|
{
|
||||||
|
return m_hasModelSelection;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MaterialBrowserModel::setHasModelSelection(bool b)
|
||||||
|
{
|
||||||
|
if (b == m_hasModelSelection)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_hasModelSelection = b;
|
||||||
|
emit hasModelSelectionChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void MaterialBrowserModel::setSearchText(const QString &searchText)
|
void MaterialBrowserModel::setSearchText(const QString &searchText)
|
||||||
{
|
{
|
||||||
QString lowerSearchText = searchText.toLower();
|
QString lowerSearchText = searchText.toLower();
|
||||||
@@ -156,11 +170,7 @@ void MaterialBrowserModel::setMaterials(const QList<ModelNode> &materials, bool
|
|||||||
emit isEmptyChanged();
|
emit isEmptyChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasQuick3DImport != m_hasQuick3DImport) {
|
setHasQuick3DImport(hasQuick3DImport);
|
||||||
m_hasQuick3DImport = hasQuick3DImport;
|
|
||||||
emit hasQuick3DImportChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
updateSelectedMaterial();
|
updateSelectedMaterial();
|
||||||
resetModel();
|
resetModel();
|
||||||
}
|
}
|
||||||
|
@@ -40,6 +40,7 @@ class MaterialBrowserModel : public QAbstractListModel
|
|||||||
Q_PROPERTY(bool isEmpty MEMBER m_isEmpty NOTIFY isEmptyChanged)
|
Q_PROPERTY(bool isEmpty MEMBER m_isEmpty NOTIFY isEmptyChanged)
|
||||||
Q_PROPERTY(int selectedIndex MEMBER m_selectedIndex NOTIFY selectedIndexChanged)
|
Q_PROPERTY(int selectedIndex MEMBER m_selectedIndex NOTIFY selectedIndexChanged)
|
||||||
Q_PROPERTY(bool hasQuick3DImport READ hasQuick3DImport WRITE setHasQuick3DImport NOTIFY hasQuick3DImportChanged)
|
Q_PROPERTY(bool hasQuick3DImport READ hasQuick3DImport WRITE setHasQuick3DImport NOTIFY hasQuick3DImportChanged)
|
||||||
|
Q_PROPERTY(bool hasModelSelection READ hasModelSelection WRITE setHasModelSelection NOTIFY hasModelSelectionChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MaterialBrowserModel(QObject *parent = nullptr);
|
MaterialBrowserModel(QObject *parent = nullptr);
|
||||||
@@ -54,6 +55,9 @@ public:
|
|||||||
bool hasQuick3DImport() const;
|
bool hasQuick3DImport() const;
|
||||||
void setHasQuick3DImport(bool b);
|
void setHasQuick3DImport(bool b);
|
||||||
|
|
||||||
|
bool hasModelSelection() const;
|
||||||
|
void setHasModelSelection(bool b);
|
||||||
|
|
||||||
void setMaterials(const QList<ModelNode> &materials, bool hasQuick3DImport);
|
void setMaterials(const QList<ModelNode> &materials, bool hasQuick3DImport);
|
||||||
void removeMaterial(const ModelNode &material);
|
void removeMaterial(const ModelNode &material);
|
||||||
void updateMaterialName(const ModelNode &material);
|
void updateMaterialName(const ModelNode &material);
|
||||||
@@ -73,6 +77,7 @@ public:
|
|||||||
signals:
|
signals:
|
||||||
void isEmptyChanged();
|
void isEmptyChanged();
|
||||||
void hasQuick3DImportChanged();
|
void hasQuick3DImportChanged();
|
||||||
|
void hasModelSelectionChanged();
|
||||||
void selectedIndexChanged(int idx);
|
void selectedIndexChanged(int idx);
|
||||||
void renameMaterialTriggered(const QmlDesigner::ModelNode &material, const QString &newName);
|
void renameMaterialTriggered(const QmlDesigner::ModelNode &material, const QString &newName);
|
||||||
void applyToSelectedTriggered(const QmlDesigner::ModelNode &material, bool add = false);
|
void applyToSelectedTriggered(const QmlDesigner::ModelNode &material, bool add = false);
|
||||||
@@ -89,6 +94,7 @@ private:
|
|||||||
int m_selectedIndex = 0;
|
int m_selectedIndex = 0;
|
||||||
bool m_isEmpty = true;
|
bool m_isEmpty = true;
|
||||||
bool m_hasQuick3DImport = false;
|
bool m_hasQuick3DImport = false;
|
||||||
|
bool m_hasModelSelection = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QmlDesigner
|
} // namespace QmlDesigner
|
||||||
|
@@ -118,10 +118,6 @@ void MaterialBrowserView::modelAboutToBeDetached(Model *model)
|
|||||||
void MaterialBrowserView::selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
|
void MaterialBrowserView::selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
|
||||||
const QList<ModelNode> &lastSelectedNodeList)
|
const QList<ModelNode> &lastSelectedNodeList)
|
||||||
{
|
{
|
||||||
if (!m_autoSelectModelMaterial)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// if selected object is a model, select its material in the material browser and editor
|
|
||||||
ModelNode selectedModel;
|
ModelNode selectedModel;
|
||||||
|
|
||||||
for (const ModelNode &node : selectedNodeList) {
|
for (const ModelNode &node : selectedNodeList) {
|
||||||
@@ -131,6 +127,11 @@ void MaterialBrowserView::selectedNodesChanged(const QList<ModelNode> &selectedN
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_widget->materialBrowserModel()->setHasModelSelection(selectedModel.isValid());
|
||||||
|
|
||||||
|
if (!m_autoSelectModelMaterial)
|
||||||
|
return;
|
||||||
|
|
||||||
if (selectedNodeList.size() > 1 || !selectedModel.isValid())
|
if (selectedNodeList.size() > 1 || !selectedModel.isValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -144,6 +145,7 @@ void MaterialBrowserView::selectedNodesChanged(const QList<ModelNode> &selectedN
|
|||||||
if (!mat.isValid())
|
if (!mat.isValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// if selected object is a model, select its material in the material browser and editor
|
||||||
int idx = m_widget->materialBrowserModel()->materialIndex(mat);
|
int idx = m_widget->materialBrowserModel()->materialIndex(mat);
|
||||||
m_widget->materialBrowserModel()->selectMaterial(idx);
|
m_widget->materialBrowserModel()->selectMaterial(idx);
|
||||||
}
|
}
|
||||||
|
@@ -233,6 +233,20 @@ void MaterialEditorContextObject::setHasQuick3DImport(bool b)
|
|||||||
emit hasQuick3DImportChanged();
|
emit hasQuick3DImportChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MaterialEditorContextObject::hasModelSelection() const
|
||||||
|
{
|
||||||
|
return m_hasModelSelection;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MaterialEditorContextObject::setHasModelSelection(bool b)
|
||||||
|
{
|
||||||
|
if (b == m_hasModelSelection)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_hasModelSelection = b;
|
||||||
|
emit hasModelSelectionChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void MaterialEditorContextObject::setSelectedMaterial(const ModelNode &matNode)
|
void MaterialEditorContextObject::setSelectedMaterial(const ModelNode &matNode)
|
||||||
{
|
{
|
||||||
m_selectedMaterial = matNode;
|
m_selectedMaterial = matNode;
|
||||||
|
@@ -55,6 +55,7 @@ class MaterialEditorContextObject : public QObject
|
|||||||
Q_PROPERTY(bool hasAliasExport READ hasAliasExport NOTIFY hasAliasExportChanged)
|
Q_PROPERTY(bool hasAliasExport READ hasAliasExport NOTIFY hasAliasExportChanged)
|
||||||
Q_PROPERTY(bool hasActiveTimeline READ hasActiveTimeline NOTIFY hasActiveTimelineChanged)
|
Q_PROPERTY(bool hasActiveTimeline READ hasActiveTimeline NOTIFY hasActiveTimelineChanged)
|
||||||
Q_PROPERTY(bool hasQuick3DImport READ hasQuick3DImport WRITE setHasQuick3DImport NOTIFY hasQuick3DImportChanged)
|
Q_PROPERTY(bool hasQuick3DImport READ hasQuick3DImport WRITE setHasQuick3DImport NOTIFY hasQuick3DImportChanged)
|
||||||
|
Q_PROPERTY(bool hasModelSelection READ hasModelSelection WRITE setHasModelSelection NOTIFY hasModelSelectionChanged)
|
||||||
|
|
||||||
Q_PROPERTY(QQmlPropertyMap *backendValues READ backendValues WRITE setBackendValues NOTIFY backendValuesChanged)
|
Q_PROPERTY(QQmlPropertyMap *backendValues READ backendValues WRITE setBackendValues NOTIFY backendValuesChanged)
|
||||||
|
|
||||||
@@ -104,6 +105,9 @@ public:
|
|||||||
bool hasQuick3DImport() const;
|
bool hasQuick3DImport() const;
|
||||||
void setHasQuick3DImport(bool b);
|
void setHasQuick3DImport(bool b);
|
||||||
|
|
||||||
|
bool hasModelSelection() const;
|
||||||
|
void setHasModelSelection(bool b);
|
||||||
|
|
||||||
bool hasAliasExport() const { return m_aliasExport; }
|
bool hasAliasExport() const { return m_aliasExport; }
|
||||||
|
|
||||||
void setSelectedMaterial(const ModelNode &matNode);
|
void setSelectedMaterial(const ModelNode &matNode);
|
||||||
@@ -130,6 +134,7 @@ signals:
|
|||||||
void hasAliasExportChanged();
|
void hasAliasExportChanged();
|
||||||
void hasActiveTimelineChanged();
|
void hasActiveTimelineChanged();
|
||||||
void hasQuick3DImportChanged();
|
void hasQuick3DImportChanged();
|
||||||
|
void hasModelSelectionChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QUrl m_specificsUrl;
|
QUrl m_specificsUrl;
|
||||||
@@ -150,6 +155,7 @@ private:
|
|||||||
bool m_aliasExport = false;
|
bool m_aliasExport = false;
|
||||||
bool m_hasActiveTimeline = false;
|
bool m_hasActiveTimeline = false;
|
||||||
bool m_hasQuick3DImport = false;
|
bool m_hasQuick3DImport = false;
|
||||||
|
bool m_hasModelSelection = false;
|
||||||
|
|
||||||
ModelNode m_selectedMaterial;
|
ModelNode m_selectedMaterial;
|
||||||
};
|
};
|
||||||
|
@@ -677,6 +677,8 @@ void MaterialEditorView::selectedNodesChanged(const QList<ModelNode> &selectedNo
|
|||||||
if (node.isSubclassOf("QtQuick3D.Model"))
|
if (node.isSubclassOf("QtQuick3D.Model"))
|
||||||
m_selectedModels.append(node);
|
m_selectedModels.append(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_qmlBackEnd->contextObject()->setHasModelSelection(!m_selectedModels.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaterialEditorView::currentStateChanged(const ModelNode &node)
|
void MaterialEditorView::currentStateChanged(const ModelNode &node)
|
||||||
|
Reference in New Issue
Block a user