forked from qt-creator/qt-creator
QmlDesigner: Store 3D edit tool states per document
This way we avoid interference from scenes in other documents. 3D Edit view content is also cleared whenever a model is detached, and puppet resize is automatically triggered if incorrectly sized image is received to keep edit 3D view content up to date. Change-Id: Ic7a71f1d89f0ebfe5a62b49ea62570242b8f5b1d Fixes: QDS-1734 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -73,6 +73,10 @@ Edit3DWidget *Edit3DView::edit3DWidget() const
|
|||||||
void Edit3DView::renderImage3DChanged(const QImage &img)
|
void Edit3DView::renderImage3DChanged(const QImage &img)
|
||||||
{
|
{
|
||||||
edit3DWidget()->canvas()->updateRenderImage(img);
|
edit3DWidget()->canvas()->updateRenderImage(img);
|
||||||
|
|
||||||
|
// Notify puppet to resize if received image wasn't correct size
|
||||||
|
if (img.size() != canvasSize())
|
||||||
|
edit3DViewResized(canvasSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
||||||
@@ -118,6 +122,15 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
|||||||
m_editLightAction->action()->setChecked(false);
|
m_editLightAction->action()->setChecked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Edit3DView::modelAboutToBeDetached(Model *model)
|
||||||
|
{
|
||||||
|
Q_UNUSED(model)
|
||||||
|
|
||||||
|
// Clear the image when model is detached (i.e. changing documents)
|
||||||
|
QImage emptyImage;
|
||||||
|
edit3DWidget()->canvas()->updateRenderImage(emptyImage);
|
||||||
|
}
|
||||||
|
|
||||||
void Edit3DView::sendInputEvent(QInputEvent *e) const
|
void Edit3DView::sendInputEvent(QInputEvent *e) const
|
||||||
{
|
{
|
||||||
nodeInstanceView()->sendInputEvent(e);
|
nodeInstanceView()->sendInputEvent(e);
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public:
|
|||||||
|
|
||||||
void renderImage3DChanged(const QImage &img) override;
|
void renderImage3DChanged(const QImage &img) override;
|
||||||
void updateActiveScene3D(const QVariantMap &sceneState) override;
|
void updateActiveScene3D(const QVariantMap &sceneState) override;
|
||||||
|
void modelAboutToBeDetached(Model *model) override;
|
||||||
|
|
||||||
void sendInputEvent(QInputEvent *e) const;
|
void sendInputEvent(QInputEvent *e) const;
|
||||||
void edit3DViewResized(const QSize &size) const;
|
void edit3DViewResized(const QSize &size) const;
|
||||||
|
|||||||
@@ -209,7 +209,9 @@ private: // functions
|
|||||||
ProjectExplorer::Target *m_currentTarget = nullptr;
|
ProjectExplorer::Target *m_currentTarget = nullptr;
|
||||||
int m_restartProcessTimerId;
|
int m_restartProcessTimerId;
|
||||||
RewriterTransaction m_puppetTransaction;
|
RewriterTransaction m_puppetTransaction;
|
||||||
QHash<QString, QVariantMap> m_edit3DToolStates; // Key: instance qml id, value: related tool states
|
|
||||||
|
// key: fileUrl value: (key: instance qml id, value: related tool states)
|
||||||
|
QHash<QUrl, QHash<QString, QVariantMap>> m_edit3DToolStates;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ProxyNodeInstanceView
|
} // namespace ProxyNodeInstanceView
|
||||||
|
|||||||
@@ -984,7 +984,7 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
|
|||||||
importVector,
|
importVector,
|
||||||
mockupTypesVector,
|
mockupTypesVector,
|
||||||
model()->fileUrl(),
|
model()->fileUrl(),
|
||||||
m_edit3DToolStates);
|
m_edit3DToolStates[model()->fileUrl()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
ClearSceneCommand NodeInstanceView::createClearSceneCommand() const
|
ClearSceneCommand NodeInstanceView::createClearSceneCommand() const
|
||||||
@@ -1454,7 +1454,7 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand
|
|||||||
auto data = qvariant_cast<QVariantList>(command.data());
|
auto data = qvariant_cast<QVariantList>(command.data());
|
||||||
if (data.size() == 3) {
|
if (data.size() == 3) {
|
||||||
QString qmlId = data[0].toString();
|
QString qmlId = data[0].toString();
|
||||||
m_edit3DToolStates[qmlId].insert(data[1].toString(), data[2]);
|
m_edit3DToolStates[model()->fileUrl()][qmlId].insert(data[1].toString(), data[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (command.type() == PuppetToCreatorCommand::Render3DView) {
|
} else if (command.type() == PuppetToCreatorCommand::Render3DView) {
|
||||||
|
|||||||
Reference in New Issue
Block a user