forked from qt-creator/qt-creator
Enable object selection in the 3D edit view
Clicking an object in the 3D object selection view, selects it in the creator side. Multiselection (i.e. Ctrl+click) is not implemented yet. Also selected object is not highlighted in the view yet. Task-number: QDS-1124 Change-Id: I0b10162539ecedc40ed117896e385975c52b04a9 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
@@ -42,12 +42,23 @@ Window {
|
|||||||
property alias showEditLight: editLightCheckbox.checked
|
property alias showEditLight: editLightCheckbox.checked
|
||||||
property alias usePerspective: usePerspectiveCheckbox.checked
|
property alias usePerspective: usePerspectiveCheckbox.checked
|
||||||
|
|
||||||
|
signal objectClicked(var object)
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: sceneBg
|
id: sceneBg
|
||||||
color: "#FFFFFF"
|
color: "#FFFFFF"
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
focus: true
|
focus: true
|
||||||
|
|
||||||
|
TapHandler { // check tapping/clicking an object in the scene
|
||||||
|
onTapped: {
|
||||||
|
var pickResult = editView.pick(eventPoint.scenePosition.x,
|
||||||
|
eventPoint.scenePosition.y);
|
||||||
|
if (pickResult.objectHit)
|
||||||
|
viewWindow.objectClicked(pickResult.objectHit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
View3D {
|
View3D {
|
||||||
id: editView
|
id: editView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
@@ -75,7 +75,7 @@ static QVariant objectToVariant(QObject *object)
|
|||||||
return QVariant::fromValue(object);
|
return QVariant::fromValue(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QObject *createEditView3D(QQmlEngine *engine)
|
QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine)
|
||||||
{
|
{
|
||||||
QmlDesigner::Internal::CameraControlHelper *helper = new QmlDesigner::Internal::CameraControlHelper();
|
QmlDesigner::Internal::CameraControlHelper *helper = new QmlDesigner::Internal::CameraControlHelper();
|
||||||
engine->rootContext()->setContextProperty("designStudioNativeCameraControlHelper", helper);
|
engine->rootContext()->setContextProperty("designStudioNativeCameraControlHelper", helper);
|
||||||
@@ -89,6 +89,8 @@ static QObject *createEditView3D(QQmlEngine *engine)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QObject::connect(window, SIGNAL(objectClicked(QVariant)), this, SLOT(objectClicked(QVariant)));
|
||||||
|
|
||||||
//For macOS we have to use the 4.1 core profile
|
//For macOS we have to use the 4.1 core profile
|
||||||
QSurfaceFormat surfaceFormat = window->requestedFormat();
|
QSurfaceFormat surfaceFormat = window->requestedFormat();
|
||||||
surfaceFormat.setVersion(4, 1);
|
surfaceFormat.setVersion(4, 1);
|
||||||
@@ -99,6 +101,11 @@ static QObject *createEditView3D(QQmlEngine *engine)
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Qt5InformationNodeInstanceServer::objectClicked(const QVariant &object) {
|
||||||
|
QObject *item = qobject_cast<QObject *>(object.value<QObject *>());
|
||||||
|
selectInstance(instanceForObject(item));
|
||||||
|
}
|
||||||
|
|
||||||
Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
|
Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
|
||||||
Qt5NodeInstanceServer(nodeInstanceClient)
|
Qt5NodeInstanceServer(nodeInstanceClient)
|
||||||
{
|
{
|
||||||
|
@@ -44,6 +44,9 @@ public:
|
|||||||
void removeSharedMemory(const RemoveSharedMemoryCommand &command) override;
|
void removeSharedMemory(const RemoveSharedMemoryCommand &command) override;
|
||||||
void changeSelection(const ChangeSelectionCommand &command) override;
|
void changeSelection(const ChangeSelectionCommand &command) override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void objectClicked(const QVariant &object);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void collectItemChangesAndSendChangeCommands() override;
|
void collectItemChangesAndSendChangeCommands() override;
|
||||||
void sendChildrenChangedCommand(const QList<ServerNodeInstance> &childList);
|
void sendChildrenChangedCommand(const QList<ServerNodeInstance> &childList);
|
||||||
@@ -54,6 +57,7 @@ protected:
|
|||||||
void modifyProperties(const QVector<InstancePropertyValueTriple> &properties);
|
void modifyProperties(const QVector<InstancePropertyValueTriple> &properties);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QObject *createEditView3D(QQmlEngine *engine);
|
||||||
void setup3DEditView(const QList<ServerNodeInstance> &instanceList);
|
void setup3DEditView(const QList<ServerNodeInstance> &instanceList);
|
||||||
QObject *findRootNodeOf3DViewport(const QList<ServerNodeInstance> &instanceList) const;
|
QObject *findRootNodeOf3DViewport(const QList<ServerNodeInstance> &instanceList) const;
|
||||||
|
|
||||||
|
@@ -1329,7 +1329,6 @@ void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command)
|
|||||||
if (!model())
|
if (!model())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
QVector<ModelNode> childNodeVector;
|
QVector<ModelNode> childNodeVector;
|
||||||
|
|
||||||
foreach (qint32 instanceId, command.childrenInstances()) {
|
foreach (qint32 instanceId, command.childrenInstances()) {
|
||||||
@@ -1396,6 +1395,7 @@ void NodeInstanceView::sendToken(const QString &token, int number, const QVector
|
|||||||
|
|
||||||
void NodeInstanceView::selectionChanged(const ChangeSelectionCommand &command)
|
void NodeInstanceView::selectionChanged(const ChangeSelectionCommand &command)
|
||||||
{
|
{
|
||||||
|
clearSelectedModelNodes();
|
||||||
foreach (const qint32 &instanceId, command.instanceIds()) {
|
foreach (const qint32 &instanceId, command.instanceIds()) {
|
||||||
if (hasModelNodeForInternalId(instanceId))
|
if (hasModelNodeForInternalId(instanceId))
|
||||||
selectModelNode(modelNodeForInternalId(instanceId));
|
selectModelNode(modelNodeForInternalId(instanceId));
|
||||||
|
Reference in New Issue
Block a user