summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmr Essam <amr.elsayed@qt.io>2022-11-04 11:24:41 +0200
committerTim Jenssen <tim.jenssen@qt.io>2022-11-04 16:48:27 +0000
commit91a7db53357aad90b44d78df222081c35b0cad91 (patch)
treec548bf59027fea8ec735b447ef257e820078b494
parentcdc0f72ecfb0f8ccb9cf17222abe9476eda8ce8c (diff)
downloadqt-creator-qds/3.8.tar.gz
QmlDesigner: Show proper warning if .qep file has no componentqds/v3.8.0qds/3.8
When dragging an empty effect, a messagebox shows with an option to open QQEM (cherry picked from commit f4723ae8856cc011d2026032a85ab7e7c0f0fdd2) Task-number: QDS-8155 Change-Id: I2afbf7ffb9cb58243f3635fe3a7aee999ab68713 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp7
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h2
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp43
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h3
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp52
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h1
-rw-r--r--src/plugins/qmldesigner/components/formeditor/dragtool.cpp29
7 files changed, 89 insertions, 48 deletions
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp
index 3b013cc2d1..c52eaa42a2 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp
@@ -86,6 +86,13 @@ bool AssetsLibraryModel::loadExpandedState(const QString &assetPath)
return m_expandedStateHash.value(assetPath, true);
}
+bool AssetsLibraryModel::isEffectQmlExist(const QString &effectName)
+{
+ Utils::FilePath effectsResDir = ModelNodeOperations::getEffectsDirectory();
+ Utils::FilePath qmlPath = effectsResDir.resolvePath(effectName + "/" + effectName + ".qml");
+ return qmlPath.exists();
+}
+
AssetsLibraryModel::DirExpandState AssetsLibraryModel::getAllExpandedState() const
{
const auto keys = m_expandedStateHash.keys();
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h
index 4e846f93af..794b7fb127 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h
@@ -74,6 +74,8 @@ public:
static void saveExpandedState(bool expanded, const QString &assetPath);
static bool loadExpandedState(const QString &assetPath);
+ static bool isEffectQmlExist(const QString &effectName);
+
enum class DirExpandState {
SomeExpanded,
AllExpanded,
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
index 5d45617522..2d967eeb4c 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
@@ -45,7 +45,6 @@
#include <utils/utilsicons.h>
#include "utils/environment.h"
#include "utils/filepath.h"
-#include "utils/qtcprocess.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/icore.h>
@@ -71,9 +70,6 @@
#include <QQmlContext>
#include <QQuickItem>
-#include <qtsupport/baseqtversion.h>
-#include <qtsupport/qtkitinformation.h>
-
namespace QmlDesigner {
static QString propertyEditorResourcesPath()
@@ -263,44 +259,7 @@ QSet<QString> AssetsLibraryWidget::supportedAssetSuffixes(bool complex)
void AssetsLibraryWidget::openEffectMaker(const QString &filePath)
{
- const ProjectExplorer::Target *target = ProjectExplorer::ProjectTree::currentTarget();
- if (!target) {
- qWarning() << __FUNCTION__ << "No project open";
- return;
- }
-
- Utils::FilePath projectPath = target->project()->projectDirectory();
- QString effectName = QFileInfo(filePath).baseName();
- QString effectResDir = "asset_imports/Effects/" + effectName;
- Utils::FilePath effectResPath = projectPath.resolvePath(effectResDir);
- if (!effectResPath.exists())
- QDir(projectPath.toString()).mkpath(effectResDir);
-
- const QtSupport::QtVersion *baseQtVersion = QtSupport::QtKitAspect::qtVersion(target->kit());
- if (baseQtVersion) {
- auto effectMakerPath = baseQtVersion->binPath().pathAppended("QQEffectMaker").withExecutableSuffix();
- if (!effectMakerPath.exists()) {
- qWarning() << __FUNCTION__ << "Cannot find EffectMaker app";
- return;
- }
-
- Utils::FilePath effectPath = Utils::FilePath::fromString(filePath);
- QString effectContents = QString::fromUtf8(effectPath.fileContents());
- QStringList arguments;
- arguments << filePath;
- if (effectContents.isEmpty())
- arguments << "--create";
- arguments << "--exportpath" << effectResPath.toString();
-
- Utils::Environment env = Utils::Environment::systemEnvironment();
- if (env.osType() == Utils::OsTypeMac)
- env.appendOrSet("QSG_RHI_BACKEND", "metal");
-
- m_qqemProcess.reset(new Utils::QtcProcess);
- m_qqemProcess->setEnvironment(env);
- m_qqemProcess->setCommand({ effectMakerPath, arguments });
- m_qqemProcess->start();
- }
+ ModelNodeOperations::openEffectMaker(filePath);
}
void AssetsLibraryWidget::setModel(Model *model)
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
index dcec0f9414..cdc11f43af 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
@@ -44,7 +44,6 @@ QT_END_NAMESPACE
namespace Utils {
class FileSystemWatcher;
- class QtcProcess;
}
namespace QmlDesigner {
@@ -118,8 +117,6 @@ private:
bool m_updateRetry = false;
QString m_filterText;
QPoint m_dragStartPoint;
-
- std::unique_ptr<Utils::QtcProcess> m_qqemProcess;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index 0e442918da..243510a9f3 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -69,11 +69,15 @@
#include <projectexplorer/project.h>
#include <projectexplorer/projectnodes.h>
#include <projectexplorer/projecttree.h>
-#include "projectexplorer/session.h"
+#include "projectexplorer/target.h"
+
+#include <qtsupport/baseqtversion.h>
+#include <qtsupport/qtkitinformation.h>
#include <utils/algorithm.h>
#include <utils/fileutils.h>
#include <utils/qtcassert.h>
+#include "utils/qtcprocess.h"
#include <QComboBox>
#include <QCoreApplication>
@@ -1617,6 +1621,52 @@ void updateImported3DAsset(const SelectionContext &selectionContext)
}
}
+void openEffectMaker(const QString &filePath)
+{
+ const ProjectExplorer::Target *target = ProjectExplorer::ProjectTree::currentTarget();
+ if (!target) {
+ qWarning() << __FUNCTION__ << "No project open";
+ return;
+ }
+
+ Utils::FilePath projectPath = target->project()->projectDirectory();
+ QString effectName = QFileInfo(filePath).baseName();
+ QString effectResDir = "asset_imports/Effects/" + effectName;
+ Utils::FilePath effectResPath = projectPath.resolvePath(effectResDir);
+ if (!effectResPath.exists())
+ QDir(projectPath.toString()).mkpath(effectResDir);
+
+ const QtSupport::QtVersion *baseQtVersion = QtSupport::QtKitAspect::qtVersion(target->kit());
+ if (baseQtVersion) {
+ auto effectMakerPath = baseQtVersion->binPath().pathAppended("QQEffectMaker").withExecutableSuffix();
+ if (!effectMakerPath.exists()) {
+ qWarning() << __FUNCTION__ << "Cannot find EffectMaker app";
+ return;
+ }
+
+ Utils::FilePath effectPath = Utils::FilePath::fromString(filePath);
+ QString effectContents = QString::fromUtf8(effectPath.fileContents());
+ QStringList arguments;
+ arguments << filePath;
+ if (effectContents.isEmpty())
+ arguments << "--create";
+ arguments << "--exportpath" << effectResPath.toString();
+
+ Utils::Environment env = Utils::Environment::systemEnvironment();
+ if (env.osType() == Utils::OsTypeMac)
+ env.appendOrSet("QSG_RHI_BACKEND", "metal");
+
+ Utils::QtcProcess *qqemProcess = new Utils::QtcProcess();
+ qqemProcess->setEnvironment(env);
+ qqemProcess->setCommand({ effectMakerPath, arguments });
+ qqemProcess->start();
+
+ QObject::connect(qqemProcess, &Utils::QtcProcess::done, [qqemProcess]() {
+ qqemProcess->deleteLater();
+ });
+ }
+}
+
Utils::FilePath getEffectsDirectory()
{
QString defaultDir = "asset_imports/Effects";
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
index 0b1b298a6f..7c4aa60d8f 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
@@ -101,6 +101,7 @@ void openSignalDialog(const SelectionContext &selectionContext);
void updateImported3DAsset(const SelectionContext &selectionContext);
QMLDESIGNERCORE_EXPORT Utils::FilePath getEffectsDirectory();
+void openEffectMaker(const QString &filePath);
// ModelNodePreviewImageOperations
QVariant previewImageDataForGenericNode(const ModelNode &modelNode);
diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
index 290e9f2193..b40ad0eaaa 100644
--- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
@@ -28,7 +28,9 @@
#include "formeditorscene.h"
#include "formeditorview.h"
#include "assetslibrarywidget.h"
+#include "assetslibrarymodel.h"
#include <metainfo.h>
+#include <modelnodeoperations.h>
#include <nodehints.h>
#include <rewritingexception.h>
#include "qmldesignerconstants.h"
@@ -41,6 +43,7 @@
#include <QMimeData>
#include <QTimer>
#include <QWidget>
+#include <QMessageBox>
static Q_LOGGING_CATEGORY(dragToolInfo, "qtc.qmldesigner.formeditor", QtWarningMsg);
@@ -264,9 +267,31 @@ void DragTool::dropEvent(const QList<QGraphicsItem *> &itemList, QGraphicsSceneD
if (targetContainerFormEditorItem) {
QmlItemNode parentQmlItemNode = targetContainerFormEditorItem->qmlItemNode();
QString effectName = QFileInfo(effectPath).baseName();
- QmlItemNode effectNode = QmlItemNode::createQmlItemNodeForEffect(view(), parentQmlItemNode, effectName);
- view()->setSelectedModelNodes({effectNode});
+ if (!AssetsLibraryModel::isEffectQmlExist(effectName)) {
+ QMessageBox msgBox;
+ msgBox.setText("Effect " + effectName + " is empty");
+ msgBox.setInformativeText("Do you want to edit " + effectName + "?");
+ msgBox.setStandardButtons(QMessageBox::No |QMessageBox::Yes);
+ msgBox.setDefaultButton(QMessageBox::Yes);
+ msgBox.setIcon(QMessageBox::Question);
+ int ret = msgBox.exec();
+ switch (ret) {
+ case QMessageBox::Yes:
+ ModelNodeOperations::openEffectMaker(effectPath);
+ break;
+ default:
+ break;
+ }
+
+ event->ignore();
+ return;
+ }
+
+ QmlItemNode effectNode = QmlItemNode::
+ createQmlItemNodeForEffect(view(), parentQmlItemNode, effectName);
+
+ view()->setSelectedModelNodes({parentQmlItemNode});
view()->resetPuppet();
commitTransaction();