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)
|
||||
{
|
||||
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)
|
||||
@@ -118,6 +122,15 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
||||
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
|
||||
{
|
||||
nodeInstanceView()->sendInputEvent(e);
|
||||
|
||||
@@ -55,6 +55,7 @@ public:
|
||||
|
||||
void renderImage3DChanged(const QImage &img) override;
|
||||
void updateActiveScene3D(const QVariantMap &sceneState) override;
|
||||
void modelAboutToBeDetached(Model *model) override;
|
||||
|
||||
void sendInputEvent(QInputEvent *e) const;
|
||||
void edit3DViewResized(const QSize &size) const;
|
||||
|
||||
@@ -209,7 +209,9 @@ private: // functions
|
||||
ProjectExplorer::Target *m_currentTarget = nullptr;
|
||||
int m_restartProcessTimerId;
|
||||
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
|
||||
|
||||
@@ -984,7 +984,7 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
|
||||
importVector,
|
||||
mockupTypesVector,
|
||||
model()->fileUrl(),
|
||||
m_edit3DToolStates);
|
||||
m_edit3DToolStates[model()->fileUrl()]);
|
||||
}
|
||||
|
||||
ClearSceneCommand NodeInstanceView::createClearSceneCommand() const
|
||||
@@ -1454,7 +1454,7 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand
|
||||
auto data = qvariant_cast<QVariantList>(command.data());
|
||||
if (data.size() == 3) {
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user