aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@nokia.com>2011-08-04 16:33:07 +0200
committerThomas Hartmann <Thomas.Hartmann@nokia.com>2011-08-04 16:47:29 +0200
commitb40d056b155813d1a86f31ea7571d2cfd195ea03 (patch)
treefe05b804c67812a493bad97b00db942c9b1ad927 /src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
parent1a5fe565691237ab5e93faca30a8ab3e0b6fbe93 (diff)
QmlDesigner.navigator: fixes crash for context menu
We have to add a check if the item we want to set visibility on is really an item. See: isItem() For general safety I added try catch blocks for RewritingExceptions Task-Number: QTCREATORBUG-5731 Change-Id: I72f4f5ae69067a04b09880ae071265c83f880b4c Reviewed-on: http://codereview.qt.nokia.com/2637 Reviewed-by: Marco Bubke <marco.bubke@nokia.com> Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp')
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp111
1 files changed, 74 insertions, 37 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
index 279c9aae06..0333b5e4fc 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
@@ -32,6 +32,7 @@
#include "modelnodecontextmenu.h"
#include <QApplication>
+#include <QMessageBox>
#include <coreplugin/editormanager/editormanager.h>
#include <nodeabstractproperty.h>
#include <nodelistproperty.h>
@@ -40,6 +41,7 @@
#include <qmlitemnode.h>
#include <variantproperty.h>
#include <nodeproperty.h>
+#include <rewritingexception.h>
#include <rewritertransaction.h>
#include <designdocumentcontroller.h>
@@ -67,6 +69,11 @@ static inline bool checkIfNodeIsAView(const ModelNode &node)
node.metaInfo().isSubclassOf("QtQuick.PathView", -1, -1));
}
+static inline bool isItem(const ModelNode &node)
+{
+ return node.metaInfo().isValid() && node.metaInfo().isSubclassOf("QtQuick.Item", -1, -1);
+}
+
static inline QList<QmlItemNode> siblingsForNode(const QmlItemNode &itemNode)
{
QList<QmlItemNode> siblingList;
@@ -242,7 +249,10 @@ void ModelNodeContextMenu::execute(const QPoint &pos, bool selectionMenuBool)
if (!modelNodesHaveProperty(selectedModelNodes, QLatin1String("width")) && !modelNodesHaveProperty(selectedModelNodes, QLatin1String("height")))
action->setDisabled(true);
editMenu->addAction(action);
- editMenu->addAction(createModelNodeAction(tr("Visibility"), editMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::ModelNodeVisibility, singleSelected));
+ action = createModelNodeAction(tr("Visibility"), editMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::ModelNodeVisibility, singleSelected);
+ editMenu->addAction(action);
+ if (!isItem(currentSingleNode))
+ action->setDisabled(true);
} else {
editMenu->setEnabled(false);
@@ -358,11 +368,15 @@ void ModelNodeAction::toFront()
if (!m_view)
return;
- QmlItemNode node = m_modelNodeList.first();
- if (node.isValid()) {
- signed int maximumZ = getMaxZValue(siblingsForNode(node));
- maximumZ++;
- node.setVariantProperty("z", maximumZ);
+ try {
+ QmlItemNode node = m_modelNodeList.first();
+ if (node.isValid()) {
+ signed int maximumZ = getMaxZValue(siblingsForNode(node));
+ maximumZ++;
+ node.setVariantProperty("z", maximumZ);
+ }
+ } catch (RewritingException &e) { //better save then sorry
+ QMessageBox::warning(0, "Error", e.description());
}
}
@@ -371,12 +385,16 @@ void ModelNodeAction::toBack()
{
if (!m_view)
return;
+ try {
+ QmlItemNode node = m_modelNodeList.first();
+ if (node.isValid()) {
+ signed int minimumZ = getMinZValue(siblingsForNode(node));
+ minimumZ--;
+ node.setVariantProperty("z", minimumZ);
+ }
- QmlItemNode node = m_modelNodeList.first();
- if (node.isValid()) {
- signed int minimumZ = getMinZValue(siblingsForNode(node));
- minimumZ--;
- node.setVariantProperty("z", minimumZ);
+ } catch (RewritingException &e) { //better save then sorry
+ QMessageBox::warning(0, "Error", e.description());
}
}
@@ -385,14 +403,18 @@ void ModelNodeAction::raise()
if (!m_view)
return;
- RewriterTransaction(m_view);
- foreach (ModelNode modelNode, m_modelNodeList) {
- QmlItemNode node = modelNode;
- if (node.isValid()) {
- signed int z = node.instanceValue("z").toInt();
- z++;
- node.setVariantProperty("z", z);
+ try {
+ RewriterTransaction(m_view);
+ foreach (ModelNode modelNode, m_modelNodeList) {
+ QmlItemNode node = modelNode;
+ if (node.isValid()) {
+ signed int z = node.instanceValue("z").toInt();
+ z++;
+ node.setVariantProperty("z", z);
+ }
}
+ } catch (RewritingException &e) { //better save then sorry
+ QMessageBox::warning(0, "Error", e.description());
}
}
@@ -400,15 +422,18 @@ void ModelNodeAction::lower()
{
if (!m_view)
return;
-
- RewriterTransaction(m_view);
- foreach (ModelNode modelNode, m_modelNodeList) {
- QmlItemNode node = modelNode;
- if (node.isValid()) {
- signed int z = node.instanceValue("z").toInt();
- z--;
- node.setVariantProperty("z", z);
+ try {
+ RewriterTransaction(m_view);
+ foreach (ModelNode modelNode, m_modelNodeList) {
+ QmlItemNode node = modelNode;
+ if (node.isValid()) {
+ signed int z = node.instanceValue("z").toInt();
+ z--;
+ node.setVariantProperty("z", z);
+ }
}
+ } catch (RewritingException &e) { //better save then sorry
+ QMessageBox::warning(0, "Error", e.description());
}
}
@@ -426,7 +451,13 @@ void ModelNodeAction::redo()
void ModelNodeAction::setVisible(bool b)
{
- m_modelNodeList.first().variantProperty("visible") = b;
+ if (!m_view)
+ return;
+ try {
+ m_modelNodeList.first().variantProperty("visible") = b;
+ } catch (RewritingException &e) { //better save then sorry
+ QMessageBox::warning(0, "Error", e.description());
+ }
}
@@ -434,11 +465,14 @@ void ModelNodeAction::resetSize()
{
if (!m_view)
return;
-
- RewriterTransaction(m_view);
- foreach (ModelNode node, m_modelNodeList) {
- node.removeProperty("width");
- node.removeProperty("height");
+ try {
+ RewriterTransaction(m_view);
+ foreach (ModelNode node, m_modelNodeList) {
+ node.removeProperty("width");
+ node.removeProperty("height");
+ }
+ } catch (RewritingException &e) { //better save then sorry
+ QMessageBox::warning(0, "Error", e.description());
}
}
@@ -446,11 +480,14 @@ void ModelNodeAction::resetPosition()
{
if (!m_view)
return;
-
- RewriterTransaction(m_view);
- foreach (ModelNode node, m_modelNodeList) {
- node.removeProperty("x");
- node.removeProperty("y");
+ try {
+ RewriterTransaction(m_view);
+ foreach (ModelNode node, m_modelNodeList) {
+ node.removeProperty("x");
+ node.removeProperty("y");
+ }
+ } catch (RewritingException &e) { //better save then sorry
+ QMessageBox::warning(0, "Error", e.description());
}
}