QmlDesigner.dragAndDrop: this avoids asserts for unknown types

This avoids asserts and catches exceptions
This commit is contained in:
Thomas Hartmann
2010-09-24 13:45:42 +02:00
parent 213b789ddc
commit 5873083768
2 changed files with 20 additions and 5 deletions

View File

@@ -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")) {

View File

@@ -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;