forked from qt-creator/qt-creator
QmlDesigner.dragAndDrop: this avoids asserts for unknown types
This avoids asserts and catches exceptions
This commit is contained in:
@@ -35,12 +35,14 @@
|
|||||||
#include "itemutilfunctions.h"
|
#include "itemutilfunctions.h"
|
||||||
#include <customdraganddrop.h>
|
#include <customdraganddrop.h>
|
||||||
#include <metainfo.h>
|
#include <metainfo.h>
|
||||||
|
#include <rewritingexception.h>
|
||||||
|
|
||||||
#include "resizehandleitem.h"
|
#include "resizehandleitem.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
@@ -143,7 +145,6 @@ void DragTool::createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry, QmlIt
|
|||||||
m_dragNode = view()->createQmlItemNode(itemLibraryEntry, pos, parentNode);
|
m_dragNode = view()->createQmlItemNode(itemLibraryEntry, pos, parentNode);
|
||||||
|
|
||||||
Q_ASSERT(m_dragNode.modelNode().isValid());
|
Q_ASSERT(m_dragNode.modelNode().isValid());
|
||||||
Q_ASSERT(m_dragNode.isValid());
|
|
||||||
|
|
||||||
QList<QmlItemNode> nodeList;
|
QList<QmlItemNode> nodeList;
|
||||||
nodeList.append(m_dragNode);
|
nodeList.append(m_dragNode);
|
||||||
@@ -205,7 +206,11 @@ void DragTool::dropEvent(QGraphicsSceneDragDropEvent * event)
|
|||||||
event->accept();
|
event->accept();
|
||||||
end(event->scenePos());
|
end(event->scenePos());
|
||||||
//Q_ASSERT(m_token.isValid());
|
//Q_ASSERT(m_token.isValid());
|
||||||
m_rewriterTransaction.commit();
|
try {
|
||||||
|
m_rewriterTransaction.commit();
|
||||||
|
} catch (RewritingException &e) {
|
||||||
|
QMessageBox::warning(0, "Error", e.description());
|
||||||
|
}
|
||||||
m_dragNode = ModelNode();
|
m_dragNode = ModelNode();
|
||||||
view()->changeToSelectionTool();
|
view()->changeToSelectionTool();
|
||||||
}
|
}
|
||||||
@@ -230,7 +235,13 @@ void DragTool::dragLeaveEvent(QGraphicsSceneDragDropEvent * event)
|
|||||||
if (m_dragNode.isValid())
|
if (m_dragNode.isValid())
|
||||||
m_dragNode.destroy();
|
m_dragNode.destroy();
|
||||||
end(event->scenePos());
|
end(event->scenePos());
|
||||||
m_rewriterTransaction.commit();
|
|
||||||
|
try {
|
||||||
|
m_rewriterTransaction.commit();
|
||||||
|
} catch (RewritingException &e) {
|
||||||
|
QMessageBox::warning(0, "Error", e.description());
|
||||||
|
}
|
||||||
|
|
||||||
QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::show();
|
QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::show();
|
||||||
QList<QmlItemNode> nodeList;
|
QList<QmlItemNode> nodeList;
|
||||||
view()->setSelectedQmlItemNodes(nodeList);
|
view()->setSelectedQmlItemNodes(nodeList);
|
||||||
@@ -267,6 +278,8 @@ void DragTool::dragMoveEvent(QGraphicsSceneDragDropEvent * event)
|
|||||||
move(event->scenePos());
|
move(event->scenePos());
|
||||||
} else {
|
} else {
|
||||||
//create new node if container
|
//create new node if container
|
||||||
|
if (m_dragNode.modelNode().isValid())
|
||||||
|
return;
|
||||||
|
|
||||||
FormEditorItem *parentItem = calculateContainer(event->scenePos());
|
FormEditorItem *parentItem = calculateContainer(event->scenePos());
|
||||||
if (!parentItem)
|
if (!parentItem)
|
||||||
@@ -284,7 +297,8 @@ void DragTool::dragMoveEvent(QGraphicsSceneDragDropEvent * event)
|
|||||||
QString imageName = QString::fromLatin1((event->mimeData()->data("application/vnd.bauhaus.libraryresource")));
|
QString imageName = QString::fromLatin1((event->mimeData()->data("application/vnd.bauhaus.libraryresource")));
|
||||||
createQmlItemNodeFromImage(imageName, parentNode, event->scenePos());
|
createQmlItemNodeFromImage(imageName, parentNode, event->scenePos());
|
||||||
} else Q_ASSERT(false);
|
} else Q_ASSERT(false);
|
||||||
beginWithPoint(event->scenePos());
|
if (m_dragNode.isValid())
|
||||||
|
beginWithPoint(event->scenePos());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (event->mimeData()->hasFormat("application/vnd.bauhaus.libraryresource")) {
|
if (event->mimeData()->hasFormat("application/vnd.bauhaus.libraryresource")) {
|
||||||
|
|||||||
@@ -199,7 +199,8 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
|
|||||||
parentNode.nodeAbstractProperty(parentNode.defaultProperty()).reparentHere(newNode);
|
parentNode.nodeAbstractProperty(parentNode.defaultProperty()).reparentHere(newNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_ASSERT(newNode.isValid());
|
if (!newNode.isValid())
|
||||||
|
return newNode;
|
||||||
|
|
||||||
QString id;
|
QString id;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user