summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2022-05-24 14:14:14 +0300
committerMahmoud Badri <mahmoud.badri@qt.io>2022-05-24 13:01:20 +0000
commit71e553f4974b2fb95b56d07ce3e35f4130ef3b64 (patch)
treea77759d46f3964ae10dcd887be2a65add6c4fa7f
parentc5818fc844c5ac65b771b31dcd96e07c362b13e1 (diff)
downloadqt-creator-71e553f4974b2fb95b56d07ce3e35f4130ef3b64.tar.gz
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>
-rw-r--r--share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml4
-rw-r--r--share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorToolBar.qml2
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp20
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h6
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp10
-rw-r--r--src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.cpp14
-rw-r--r--src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.h6
-rw-r--r--src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp2
8 files changed, 52 insertions, 12 deletions
diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml
index 1518e477e3..f0d8cf7e73 100644
--- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml
+++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml
@@ -92,13 +92,13 @@ Item {
StudioControls.MenuItem {
text: qsTr("Apply to selected (replace)")
- enabled: currentMaterial
+ enabled: currentMaterial && materialBrowserModel.hasModelSelection
onTriggered: materialBrowserModel.applyToSelected(currentMaterial.materialInternalId, false)
}
StudioControls.MenuItem {
text: qsTr("Apply to selected (add)")
- enabled: currentMaterial
+ enabled: currentMaterial && materialBrowserModel.hasModelSelection
onTriggered: materialBrowserModel.applyToSelected(currentMaterial.materialInternalId, true)
}
diff --git a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorToolBar.qml b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorToolBar.qml
index 028957c882..c610df94c5 100644
--- a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorToolBar.qml
+++ b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorToolBar.qml
@@ -50,7 +50,7 @@ Rectangle {
normalColor: "transparent"
iconSize: StudioTheme.Values.bigIconFontSize
buttonSize: root.height
- enabled: hasMaterial && hasQuick3DImport
+ enabled: hasMaterial && hasModelSelection && hasQuick3DImport
onClicked: root.toolBarAction(ToolBarAction.ApplyToSelected)
tooltip: qsTr("Apply material to selected model.")
}
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp
index 012b540914..005b6ed5dd 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp
@@ -106,6 +106,20 @@ void MaterialBrowserModel::setHasQuick3DImport(bool b)
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)
{
QString lowerSearchText = searchText.toLower();
@@ -156,11 +170,7 @@ void MaterialBrowserModel::setMaterials(const QList<ModelNode> &materials, bool
emit isEmptyChanged();
}
- if (hasQuick3DImport != m_hasQuick3DImport) {
- m_hasQuick3DImport = hasQuick3DImport;
- emit hasQuick3DImportChanged();
- }
-
+ setHasQuick3DImport(hasQuick3DImport);
updateSelectedMaterial();
resetModel();
}
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h
index 7d8fa15121..5f00596ef9 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h
@@ -40,6 +40,7 @@ class MaterialBrowserModel : public QAbstractListModel
Q_PROPERTY(bool isEmpty MEMBER m_isEmpty NOTIFY isEmptyChanged)
Q_PROPERTY(int selectedIndex MEMBER m_selectedIndex NOTIFY selectedIndexChanged)
Q_PROPERTY(bool hasQuick3DImport READ hasQuick3DImport WRITE setHasQuick3DImport NOTIFY hasQuick3DImportChanged)
+ Q_PROPERTY(bool hasModelSelection READ hasModelSelection WRITE setHasModelSelection NOTIFY hasModelSelectionChanged)
public:
MaterialBrowserModel(QObject *parent = nullptr);
@@ -54,6 +55,9 @@ public:
bool hasQuick3DImport() const;
void setHasQuick3DImport(bool b);
+ bool hasModelSelection() const;
+ void setHasModelSelection(bool b);
+
void setMaterials(const QList<ModelNode> &materials, bool hasQuick3DImport);
void removeMaterial(const ModelNode &material);
void updateMaterialName(const ModelNode &material);
@@ -73,6 +77,7 @@ public:
signals:
void isEmptyChanged();
void hasQuick3DImportChanged();
+ void hasModelSelectionChanged();
void selectedIndexChanged(int idx);
void renameMaterialTriggered(const QmlDesigner::ModelNode &material, const QString &newName);
void applyToSelectedTriggered(const QmlDesigner::ModelNode &material, bool add = false);
@@ -89,6 +94,7 @@ private:
int m_selectedIndex = 0;
bool m_isEmpty = true;
bool m_hasQuick3DImport = false;
+ bool m_hasModelSelection = false;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
index 0946411c9b..3239d2f302 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
@@ -118,10 +118,6 @@ void MaterialBrowserView::modelAboutToBeDetached(Model *model)
void MaterialBrowserView::selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
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;
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())
return;
@@ -144,6 +145,7 @@ void MaterialBrowserView::selectedNodesChanged(const QList<ModelNode> &selectedN
if (!mat.isValid())
return;
+ // if selected object is a model, select its material in the material browser and editor
int idx = m_widget->materialBrowserModel()->materialIndex(mat);
m_widget->materialBrowserModel()->selectMaterial(idx);
}
diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.cpp
index bf365bf270..435c531897 100644
--- a/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.cpp
+++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.cpp
@@ -233,6 +233,20 @@ void MaterialEditorContextObject::setHasQuick3DImport(bool b)
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)
{
m_selectedMaterial = matNode;
diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.h b/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.h
index c1b9a88046..54d72171a5 100644
--- a/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.h
+++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorcontextobject.h
@@ -55,6 +55,7 @@ class MaterialEditorContextObject : public QObject
Q_PROPERTY(bool hasAliasExport READ hasAliasExport NOTIFY hasAliasExportChanged)
Q_PROPERTY(bool hasActiveTimeline READ hasActiveTimeline NOTIFY hasActiveTimelineChanged)
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)
@@ -104,6 +105,9 @@ public:
bool hasQuick3DImport() const;
void setHasQuick3DImport(bool b);
+ bool hasModelSelection() const;
+ void setHasModelSelection(bool b);
+
bool hasAliasExport() const { return m_aliasExport; }
void setSelectedMaterial(const ModelNode &matNode);
@@ -130,6 +134,7 @@ signals:
void hasAliasExportChanged();
void hasActiveTimelineChanged();
void hasQuick3DImportChanged();
+ void hasModelSelectionChanged();
private:
QUrl m_specificsUrl;
@@ -150,6 +155,7 @@ private:
bool m_aliasExport = false;
bool m_hasActiveTimeline = false;
bool m_hasQuick3DImport = false;
+ bool m_hasModelSelection = false;
ModelNode m_selectedMaterial;
};
diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
index b72b91117f..5f115b6777 100644
--- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
+++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
@@ -677,6 +677,8 @@ void MaterialEditorView::selectedNodesChanged(const QList<ModelNode> &selectedNo
if (node.isSubclassOf("QtQuick3D.Model"))
m_selectedModels.append(node);
}
+
+ m_qmlBackEnd->contextObject()->setHasModelSelection(!m_selectedModels.isEmpty());
}
void MaterialEditorView::currentStateChanged(const ModelNode &node)