QmlDesigner: Add error channel from puppet -> designer

Change-Id: I57c325fd98ed505abc19f87ac8a164d7e0c76244
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
This commit is contained in:
Thomas Hartmann
2015-07-08 12:57:40 +02:00
committed by Thomas Hartmann
parent 6d81730764
commit dd32d1a16e
8 changed files with 70 additions and 0 deletions

View File

@@ -173,6 +173,7 @@ public:
void emitCustomNotification(const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
void emitInstancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
void emitInstanceErrorChange(const QVector<qint32> &instanceIds);
void emitInstancesCompleted(const QVector<ModelNode> &nodeList);
void emitInstanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void emitInstancesRenderImageChanged(const QVector<ModelNode> &nodeList);
@@ -214,6 +215,7 @@ public:
virtual void rewriterEndTransaction() = 0;
virtual void currentStateChanged(const ModelNode &node) = 0; // base state is a invalid model node
virtual void instanceErrorChange(const QVector<ModelNode> &errorNodeList);
virtual void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
const QList<ModelNode> &lastSelectedNodeList) = 0;

View File

@@ -94,6 +94,8 @@ public:
void setY(double y);
bool hasAnchors() const;
QString error() const;
bool hasError() const;
protected:
void setProperty(const PropertyName &name, const QVariant &value);
@@ -124,6 +126,7 @@ protected:
void setParentId(qint32 instanceId);
void setRenderPixmap(const QImage &image);
bool setError(const QString &errorMessage);
NodeInstance(ProxyNodeInstanceData *d);
private:

View File

@@ -55,6 +55,8 @@ public:
static bool isValidQmlObjectNode(const ModelNode &modelNode);
bool isValid() const;
bool hasError() const;
QString error() const;
bool hasNodeParent() const;
bool hasInstanceParent() const;
bool hasInstanceParentItem() const;

View File

@@ -84,6 +84,8 @@ public:
QPixmap renderPixmap;
QPixmap blurredRenderPixmap;
QString errorMessage;
QHash<PropertyName, QPair<PropertyName, qint32> > anchors;
};
@@ -179,6 +181,17 @@ bool NodeInstance::hasAnchors() const
|| hasAnchor("anchors.baseline");
}
QString NodeInstance::error() const
{
return d->errorMessage;
}
bool NodeInstance::hasError() const
{
return !d->errorMessage.isEmpty();
}
bool NodeInstance::isValid() const
{
return instanceId() >= 0 && modelNode().isValid();
@@ -392,6 +405,15 @@ void NodeInstance::setRenderPixmap(const QImage &image)
d->blurredRenderPixmap = QPixmap();
}
bool NodeInstance::setError(const QString &errorMessage)
{
if (d->errorMessage != errorMessage) {
d->errorMessage = errorMessage;
return true;
}
return false;
}
void NodeInstance::setParentId(qint32 instanceId)
{
d->parentInstanceId = instanceId;

View File

@@ -192,6 +192,11 @@ void AbstractView::modelAboutToBeDetached(Model *)
Empty properties were removed.
*/
void AbstractView::instanceErrorChange(const QVector<ModelNode> &/*errorNodeList*/)
{
}
// Node related functions
/*!
@@ -462,6 +467,12 @@ void AbstractView::emitInstancePropertyChange(const QList<QPair<ModelNode, Prope
model()->d->notifyInstancePropertyChange(propertyList);
}
void AbstractView::emitInstanceErrorChange(const QVector<qint32> &instanceIds)
{
if (model() && nodeInstanceView() == this)
model()->d->notifyInstanceErrorChange(instanceIds);
}
void AbstractView::emitInstancesCompleted(const QVector<ModelNode> &nodeVector)
{
if (model() && nodeInstanceView() == this)

View File

@@ -435,6 +435,19 @@ void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, Pro
}
}
void ModelPrivate::notifyInstanceErrorChange(const QVector<qint32> &instanceIds)
{
// no need to notify the rewriter or the instance view
QVector<ModelNode> errorNodeList;
foreach (const QPointer<AbstractView> &view, m_viewList) {
Q_ASSERT(view != 0);
foreach (qint32 instanceId, instanceIds)
errorNodeList.append(ModelNode(model()->d->nodeForInternalId(instanceId), model(), view));
view->instanceErrorChange(errorNodeList);
}
}
void ModelPrivate::notifyInstancesCompleted(const QVector<ModelNode> &nodeVector)
{
bool resetModel = false;

View File

@@ -152,6 +152,7 @@ public:
void notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
void notifyInstancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList);
void notifyInstanceErrorChange(const QVector<qint32> &instanceIds);
void notifyInstancesCompleted(const QVector<ModelNode> &nodeList);
void notifyInstancesInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash);
void notifyInstancesRenderImageChanged(const QVector<ModelNode> &nodeList);

View File

@@ -486,6 +486,22 @@ bool QmlObjectNode::isValid() const
return isValidQmlObjectNode(modelNode());
}
bool QmlObjectNode::hasError() const
{
if (isValid())
return nodeInstance().hasError();
else
qDebug() << "called hasError() on an invalid QmlObjectNode";
return false;
}
QString QmlObjectNode::error() const
{
if (hasError())
return nodeInstance().error();
return QString();
}
bool QmlObjectNode::hasNodeParent() const
{
return modelNode().hasParentProperty();