aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp')
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp58
1 files changed, 51 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
index d9cc152181..5c961eb8ae 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -26,14 +26,15 @@
#include "designeractionmanager.h"
#include "changestyleaction.h"
+#include "designeractionmanagerview.h"
#include "modelnodecontextmenu_helper.h"
+#include "qmldesignerconstants.h"
+#include "rewritingexception.h"
#include <bindingproperty.h>
-#include <nodeproperty.h>
-#include <nodelistproperty.h>
#include <nodehints.h>
+#include <nodelistproperty.h>
#include <nodemetainfo.h>
-#include "designeractionmanagerview.h"
-#include "qmldesignerconstants.h"
+#include <nodeproperty.h>
#include <formeditortoolbutton.h>
@@ -44,8 +45,6 @@
#include <listmodeleditor/listmodeleditordialog.h>
#include <listmodeleditor/listmodeleditormodel.h>
-#include <QHBoxLayout>
-#include <QGraphicsLinearLayout>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/icore.h>
@@ -53,6 +52,12 @@
#include <utils/qtcassert.h>
#include <utils/utilsicons.h>
+#include <QGraphicsLinearLayout>
+#include <QHBoxLayout>
+#include <QMessageBox>
+
+#include <exception>
+
namespace QmlDesigner {
static inline QString captionForModelNode(const ModelNode &modelNode)
@@ -339,6 +344,12 @@ public:
}
};
+class DocumentError : public std::exception
+{
+public:
+ const char *what() const override { return "Current document contains errors."; }
+};
+
class EditListModelAction final : public ModelNodeContextMenuAction
{
public:
@@ -384,6 +395,24 @@ public:
return view->createModelNode(elementMetaInfo.typeName(),
elementMetaInfo.majorVersion(),
elementMetaInfo.minorVersion());
+ },
+ [&](const ModelNode &node) {
+ bool isNowInComponent = ModelNodeOperations::goIntoComponent(
+ node);
+
+ Model *currentModel = QmlDesignerPlugin::instance()
+ ->currentDesignDocument()
+ ->currentModel();
+
+ if (currentModel->rewriterView()
+ && currentModel->rewriterView()->inErrorState()) {
+ throw DocumentError{};
+ }
+
+ if (isNowInComponent)
+ return view->rootModelNode();
+
+ return node;
}};
model.setListView(targetNode);
@@ -391,7 +420,22 @@ public:
ListModelEditorDialog dialog{Core::ICore::mainWindow()};
dialog.setModel(&model);
- dialog.exec();
+ try {
+ dialog.exec();
+ } catch (const DocumentError &) {
+ QMessageBox::warning(
+ Core::ICore::mainWindow(),
+ QCoreApplication::translate("DesignerActionManager", "Document has errors"),
+ QCoreApplication::translate("DesignerActionManager",
+ "The document which contains the list model "
+ "contains errors. So we cannot edit it."));
+ } catch (const RewritingException &) {
+ QMessageBox::warning(
+ Core::ICore::mainWindow(),
+ QCoreApplication::translate("DesignerActionManager", "Document cannot be written"),
+ QCoreApplication::translate("DesignerActionManager",
+ "An error occurred during a write attemp."));
+ }
}
};