QmlDesigner: Add 3D editor visibility toggle actions

Added toggle for showing selection boxes, camera frustums, and icon
gizmos.

Fixes: QDS-5954
Change-Id: I97e12a3a04b9a1a1af5851e382f36c58ee869f45
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Miikka Heikkinen
2022-01-21 17:15:01 +02:00
parent fd49c1d567
commit d48a4bd60f
25 changed files with 353 additions and 51 deletions
@@ -30,6 +30,7 @@ IconGizmo {
id: cameraGizmo
property Model frustumModel: null
property bool globalShowFrustum: false
iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png"
@@ -46,8 +47,12 @@ IconGizmo {
frustum.targetNode = targetNode;
frustum.targetNode = Qt.binding(function() {return targetNode;});
frustum.visible = visible || (targetNode && selected && activeScene === scene);
frustum.visible = Qt.binding(function() {return visible || (targetNode && selected && activeScene === scene);});
frustum.visible = (canBeVisible && globalShowFrustum)
|| (targetNode && selected && activeScene === scene);
frustum.visible = Qt.binding(function() {
return (canBeVisible && globalShowFrustum)
|| (targetNode && selected && activeScene === scene);
});
}
onActiveSceneChanged: {
@@ -39,6 +39,9 @@ Item {
property bool showEditLight: false
property bool showGrid: true
property bool showSelectionBox: true
property bool showIconGizmo: true
property bool showCameraFrustum: false
property bool usePerspective: true
property bool globalOrientation: false
property alias contentItem: contentItem
@@ -71,6 +74,9 @@ Item {
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
onGlobalOrientationChanged: _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
onShowGridChanged: _generalHelper.storeToolState(sceneId, "showGrid", showGrid);
onShowSelectionBoxChanged: _generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox);
onShowIconGizmoChanged: _generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo);
onShowCameraFrustumChanged: _generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum);
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
@@ -211,6 +217,21 @@ Item {
else if (resetToDefault)
showGrid = true;
if ("showSelectionBox" in toolStates)
showSelectionBox = toolStates.showSelectionBox;
else if (resetToDefault)
showSelectionBox = true;
if ("showIconGizmo" in toolStates)
showIconGizmo = toolStates.showIconGizmo;
else if (resetToDefault)
showIconGizmo = true;
if ("showCameraFrustum" in toolStates)
showCameraFrustum = toolStates.showCameraFrustum;
else if (resetToDefault)
showCameraFrustum = false;
if ("usePerspective" in toolStates)
usePerspective = toolStates.usePerspective;
else if (resetToDefault)
@@ -241,6 +262,9 @@ Item {
{
_generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
_generalHelper.storeToolState(sceneId, "showGrid", showGrid)
_generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox)
_generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo)
_generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum)
_generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
_generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
@@ -264,6 +288,7 @@ Item {
"geometryName": geometryName});
selectionBoxes[selectionBoxes.length] = box;
box.view3D = Qt.binding(function() {return editView;});
box.visible = Qt.binding(function() {return showSelectionBox;});
}
}
}
@@ -364,11 +389,13 @@ Item {
"selectedNodes": selectedNodes, "scene": scene,
"activeScene": activeScene,
"locked": _generalHelper.isLocked(obj),
"hidden": _generalHelper.isHidden(obj)});
"hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo});
lightIconGizmos[lightIconGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
}
}
@@ -407,12 +434,15 @@ Item {
overlayView,
{"view3D": overlayView, "targetNode": obj,
"selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene,
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj)});
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo, "globalShowFrustum": showCameraFrustum});
cameraGizmos[cameraGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
gizmo.globalShowFrustum = Qt.binding(function() {return showCameraFrustum;});
frustum.viewPortRect = Qt.binding(function() {return viewPortRect;});
gizmo.connectFrustum(frustum);
}
@@ -449,11 +479,13 @@ Item {
"selectedNodes": selectedNodes, "scene": scene,
"activeScene": activeScene,
"locked": _generalHelper.isLocked(obj),
"hidden": _generalHelper.isHidden(obj)});
"hidden": _generalHelper.isHidden(obj),
"globalShow": showIconGizmo});
particleSystemIconGizmos[particleSystemIconGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
}
}
@@ -45,6 +45,8 @@ Item {
property bool hasMouse: false
property bool hidden: false
property bool locked: false
property bool globalShow: true
property bool canBeVisible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
property alias iconSource: iconImage.source
@@ -55,7 +57,7 @@ Item {
hasMouse = false;
}
visible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
visible: canBeVisible && globalShow
Overlay2D {
id: iconOverlay