| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | /**************************************************************************** | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Copyright (C) 2019 The Qt Company Ltd. | 
					
						
							|  |  |  | ** Contact: https://www.qt.io/licensing/
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator. | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Commercial License Usage | 
					
						
							|  |  |  | ** Licensees holding valid commercial Qt licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the commercial license agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and The Qt Company. For licensing terms | 
					
						
							|  |  |  | ** and conditions see https://www.qt.io/terms-conditions. For further
 | 
					
						
							|  |  |  | ** information use the contact form at https://www.qt.io/contact-us.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** GNU General Public License Usage | 
					
						
							|  |  |  | ** Alternatively, this file may be used under the terms of the GNU | 
					
						
							|  |  |  | ** General Public License version 3 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT | 
					
						
							|  |  |  | ** included in the packaging of this file. Please review the following | 
					
						
							|  |  |  | ** information to ensure the GNU General Public License requirements will | 
					
						
							|  |  |  | ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ****************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  | import QtQuick 2.12 | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | import QtQuick.Window 2.0 | 
					
						
							|  |  |  | import QtQuick3D 1.0 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  | import QtQuick3D.Helpers 1.0 | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | import QtQuick.Controls 2.0 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  | import QtGraphicalEffects 1.0 | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | Window { | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |     id: viewWindow | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  |     width: 1024 | 
					
						
							|  |  |  |     height: 768 | 
					
						
							|  |  |  |     visible: true | 
					
						
							|  |  |  |     title: "3D" | 
					
						
							|  |  |  |     flags: Qt.WindowStaysOnTopHint | Qt.Window | Qt.WindowTitleHint | Qt.WindowCloseButtonHint | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-04 13:29:20 +02:00
										 |  |  |     property alias scene: editView.importScene | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |     property alias showEditLight: editLightCheckbox.checked | 
					
						
							|  |  |  |     property alias usePerspective: usePerspectiveCheckbox.checked | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |     property Node selectedNode: null | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |     property var lightGizmos: [] | 
					
						
							|  |  |  |     property var cameraGizmos: [] | 
					
						
							| 
									
										
										
										
											2019-11-07 10:46:14 +02:00
										 |  |  |     property rect viewPortRect: Qt.rect(0, 0, 1000, 1000) | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 15:40:55 +03:00
										 |  |  |     signal objectClicked(var object) | 
					
						
							| 
									
										
										
										
											2019-10-31 10:46:14 +02:00
										 |  |  |     signal commitObjectProperty(var object, var propName) | 
					
						
							|  |  |  |     signal changeObjectProperty(var object, var propName) | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-25 15:25:21 +03:00
										 |  |  |     function selectObject(object) { | 
					
						
							|  |  |  |         selectedNode = object; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |     function emitObjectClicked(object) { | 
					
						
							|  |  |  |         selectObject(object); | 
					
						
							|  |  |  |         objectClicked(object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function addLightGizmo(obj) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var component = Qt.createComponent("LightGizmo.qml"); | 
					
						
							|  |  |  |         if (component.status === Component.Ready) { | 
					
						
							|  |  |  |             var gizmo = component.createObject(overlayScene, | 
					
						
							|  |  |  |                                                {"view3D": overlayView, "targetNode": obj}); | 
					
						
							|  |  |  |             lightGizmos[lightGizmos.length] = gizmo; | 
					
						
							|  |  |  |             gizmo.selected.connect(emitObjectClicked); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function addCameraGizmo(obj) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         var component = Qt.createComponent("CameraGizmo.qml"); | 
					
						
							|  |  |  |         if (component.status === Component.Ready) { | 
					
						
							| 
									
										
										
										
											2019-11-07 10:46:14 +02:00
										 |  |  |             var geometryName = designStudioNativeCameraControlHelper.generateUniqueName("CameraGeometry"); | 
					
						
							|  |  |  |             var gizmo = component.createObject( | 
					
						
							|  |  |  |                         overlayScene, | 
					
						
							|  |  |  |                         {"view3D": overlayView, "targetNode": obj, "geometryName": geometryName, | 
					
						
							|  |  |  |                          "viewPortRect": viewPortRect}); | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |             cameraGizmos[cameraGizmos.length] = gizmo; | 
					
						
							|  |  |  |             gizmo.selected.connect(emitObjectClicked); | 
					
						
							| 
									
										
										
										
											2019-11-07 10:46:14 +02:00
										 |  |  |             gizmo.viewPortRect = Qt.binding(function() {return viewPortRect;}); | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Work-around the fact that the projection matrix for the camera is not calculated until
 | 
					
						
							|  |  |  |     // the first frame is rendered, so any initial calls to mapFrom3DScene() will fail.
 | 
					
						
							|  |  |  |     Component.onCompleted: designStudioNativeCameraControlHelper.requestOverlayUpdate(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     onWidthChanged: designStudioNativeCameraControlHelper.requestOverlayUpdate(); | 
					
						
							|  |  |  |     onHeightChanged: designStudioNativeCameraControlHelper.requestOverlayUpdate(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |     Node { | 
					
						
							|  |  |  |         id: overlayScene | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |         PerspectiveCamera { | 
					
						
							|  |  |  |             id: overlayPerspectiveCamera | 
					
						
							|  |  |  |             clipFar: editPerspectiveCamera.clipFar | 
					
						
							|  |  |  |             position: editPerspectiveCamera.position | 
					
						
							|  |  |  |             rotation: editPerspectiveCamera.rotation | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         OrthographicCamera { | 
					
						
							|  |  |  |             id: overlayOrthoCamera | 
					
						
							|  |  |  |             position: editOrthoCamera.position | 
					
						
							|  |  |  |             rotation: editOrthoCamera.rotation | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         MoveGizmo { | 
					
						
							|  |  |  |             id: moveGizmo | 
					
						
							|  |  |  |             scale: autoScale.getScale(Qt.vector3d(5, 5, 5)) | 
					
						
							|  |  |  |             highlightOnHover: true | 
					
						
							|  |  |  |             targetNode: viewWindow.selectedNode | 
					
						
							| 
									
										
										
										
											2019-10-25 11:45:52 +03:00
										 |  |  |             position: viewWindow.selectedNode ? viewWindow.selectedNode.scenePosition | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |                                               : Qt.vector3d(0, 0, 0) | 
					
						
							| 
									
										
										
										
											2019-10-30 10:52:51 +02:00
										 |  |  |             globalOrientation: globalControl.checked | 
					
						
							| 
									
										
										
										
											2019-11-08 15:05:36 +02:00
										 |  |  |             visible: selectedNode && btnMove.selected | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |             view3D: overlayView | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-31 10:46:14 +02:00
										 |  |  |             onPositionCommit: viewWindow.commitObjectProperty(selectedNode, "position") | 
					
						
							|  |  |  |             onPositionMove: viewWindow.changeObjectProperty(selectedNode, "position") | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ScaleGizmo { | 
					
						
							|  |  |  |             id: scaleGizmo | 
					
						
							|  |  |  |             scale: autoScale.getScale(Qt.vector3d(5, 5, 5)) | 
					
						
							|  |  |  |             highlightOnHover: true | 
					
						
							|  |  |  |             targetNode: viewWindow.selectedNode | 
					
						
							|  |  |  |             position: viewWindow.selectedNode ? viewWindow.selectedNode.scenePosition | 
					
						
							|  |  |  |                                               : Qt.vector3d(0, 0, 0) | 
					
						
							|  |  |  |             globalOrientation: globalControl.checked | 
					
						
							| 
									
										
										
										
											2019-11-08 15:05:36 +02:00
										 |  |  |             visible: selectedNode && btnScale.selected | 
					
						
							| 
									
										
										
										
											2019-10-31 10:46:14 +02:00
										 |  |  |             view3D: overlayView | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             onScaleCommit: viewWindow.commitObjectProperty(selectedNode, "scale") | 
					
						
							|  |  |  |             onScaleChange: viewWindow.changeObjectProperty(selectedNode, "scale") | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         AutoScaleHelper { | 
					
						
							|  |  |  |             id: autoScale | 
					
						
							|  |  |  |             view3D: overlayView | 
					
						
							| 
									
										
										
										
											2019-10-25 11:45:52 +03:00
										 |  |  |             position: moveGizmo.scenePosition | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-10-23 15:40:55 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  |     Rectangle { | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |         id: sceneBg | 
					
						
							|  |  |  |         color: "#FFFFFF" | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  |         anchors.fill: parent | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |         focus: true | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 15:40:55 +03:00
										 |  |  |         TapHandler { // check tapping/clicking an object in the scene
 | 
					
						
							|  |  |  |             onTapped: { | 
					
						
							|  |  |  |                 var pickResult = editView.pick(eventPoint.scenePosition.x, | 
					
						
							|  |  |  |                                                eventPoint.scenePosition.y); | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |                 emitObjectClicked(pickResult.objectHit); | 
					
						
							| 
									
										
										
										
											2019-10-23 15:40:55 +03:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 10:51:09 +02:00
										 |  |  |         DropArea { | 
					
						
							|  |  |  |             anchors.fill: parent | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |         View3D { | 
					
						
							|  |  |  |             id: editView | 
					
						
							|  |  |  |             anchors.fill: parent | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |             camera: usePerspective ? editPerspectiveCamera : editOrthoCamera | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |             Node { | 
					
						
							|  |  |  |                 id: mainSceneHelpers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 AxisHelper { | 
					
						
							|  |  |  |                     id: axisGrid | 
					
						
							|  |  |  |                     enableXZGrid: true | 
					
						
							|  |  |  |                     enableAxisLines: false | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 PointLight { | 
					
						
							| 
									
										
										
										
											2019-11-08 12:58:13 +02:00
										 |  |  |                     id: editLight | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |                     visible: showEditLight | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |                     position: usePerspective ? editPerspectiveCamera.position | 
					
						
							|  |  |  |                                              : editOrthoCamera.position | 
					
						
							| 
									
										
										
										
											2019-11-08 12:58:13 +02:00
										 |  |  |                     quadraticFade: 0 | 
					
						
							|  |  |  |                     linearFade: 0 | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |                 PerspectiveCamera { | 
					
						
							|  |  |  |                     id: editPerspectiveCamera | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |                     y: 200 | 
					
						
							|  |  |  |                     z: -300 | 
					
						
							|  |  |  |                     clipFar: 100000 | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 OrthographicCamera { | 
					
						
							|  |  |  |                     id: editOrthoCamera | 
					
						
							|  |  |  |                     y: 200 | 
					
						
							|  |  |  |                     z: -300 | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |         View3D { | 
					
						
							|  |  |  |             id: overlayView | 
					
						
							|  |  |  |             anchors.fill: parent | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |             camera: usePerspective ? overlayPerspectiveCamera : overlayOrthoCamera | 
					
						
							| 
									
										
										
										
											2019-11-04 13:29:20 +02:00
										 |  |  |             importScene: overlayScene | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-24 17:22:49 +03:00
										 |  |  |         Overlay2D { | 
					
						
							|  |  |  |             id: gizmoLabel | 
					
						
							| 
									
										
										
										
											2019-10-31 10:46:14 +02:00
										 |  |  |             targetNode: moveGizmo.visible ? moveGizmo : scaleGizmo | 
					
						
							| 
									
										
										
										
											2019-10-24 17:22:49 +03:00
										 |  |  |             targetView: overlayView | 
					
						
							|  |  |  |             offsetX: 0 | 
					
						
							|  |  |  |             offsetY: 45 | 
					
						
							| 
									
										
										
										
											2019-10-31 10:46:14 +02:00
										 |  |  |             visible: targetNode.dragging | 
					
						
							| 
									
										
										
										
											2019-10-24 17:22:49 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |             Rectangle { | 
					
						
							|  |  |  |                 color: "white" | 
					
						
							|  |  |  |                 x: -width / 2 | 
					
						
							|  |  |  |                 y: -height | 
					
						
							|  |  |  |                 width: gizmoLabelText.width + 4 | 
					
						
							|  |  |  |                 height: gizmoLabelText.height + 4 | 
					
						
							|  |  |  |                 border.width: 1 | 
					
						
							|  |  |  |                 Text { | 
					
						
							|  |  |  |                     id: gizmoLabelText | 
					
						
							|  |  |  |                     text: { | 
					
						
							|  |  |  |                         var l = Qt.locale(); | 
					
						
							| 
									
										
										
										
											2019-10-31 10:46:14 +02:00
										 |  |  |                         var targetProperty; | 
					
						
							|  |  |  |                         if (viewWindow.selectedNode) { | 
					
						
							|  |  |  |                             if (gizmoLabel.targetNode === moveGizmo) | 
					
						
							|  |  |  |                                 targetProperty = viewWindow.selectedNode.position; | 
					
						
							|  |  |  |                             else | 
					
						
							|  |  |  |                                 targetProperty = viewWindow.selectedNode.scale; | 
					
						
							|  |  |  |                             return qsTr("x:") + Number(targetProperty.x).toLocaleString(l, 'f', 1) | 
					
						
							|  |  |  |                                 + qsTr(" y:") + Number(targetProperty.y).toLocaleString(l, 'f', 1) | 
					
						
							|  |  |  |                                 + qsTr(" z:") + Number(targetProperty.z).toLocaleString(l, 'f', 1); | 
					
						
							|  |  |  |                         } else { | 
					
						
							|  |  |  |                             return ""; | 
					
						
							|  |  |  |                         } | 
					
						
							| 
									
										
										
										
											2019-10-24 17:22:49 +03:00
										 |  |  |                     } | 
					
						
							|  |  |  |                     anchors.centerIn: parent | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |         WasdController { | 
					
						
							|  |  |  |             id: cameraControl | 
					
						
							|  |  |  |             controlledObject: editView.camera | 
					
						
							|  |  |  |             acceptedButtons: Qt.RightButton | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |             onInputsNeedProcessingChanged: designStudioNativeCameraControlHelper.enabled | 
					
						
							|  |  |  |                                            = cameraControl.inputsNeedProcessing | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |             // Use separate native timer as QML timers don't work inside Qt Design Studio
 | 
					
						
							|  |  |  |             Connections { | 
					
						
							|  |  |  |                 target: designStudioNativeCameraControlHelper | 
					
						
							|  |  |  |                 onUpdateInputs: cameraControl.processInputs() | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-08 15:05:36 +02:00
										 |  |  |     Rectangle { // toolbar
 | 
					
						
							|  |  |  |         id: toolbar | 
					
						
							|  |  |  |         color: "#9F000000" | 
					
						
							|  |  |  |         width: 35 | 
					
						
							|  |  |  |         height: col.height | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Column { | 
					
						
							|  |  |  |             id: col | 
					
						
							|  |  |  |             anchors.horizontalCenter: parent.horizontalCenter | 
					
						
							|  |  |  |             spacing: 5 | 
					
						
							|  |  |  |             padding: 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             property var group: [btnSelectItem, btnSelectGroup, btnMove, btnRotate, btnScale] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ToolbarButton { | 
					
						
							|  |  |  |                 id: btnSelectItem | 
					
						
							|  |  |  |                 selected: true | 
					
						
							|  |  |  |                 tooltip: qsTr("Select Item") | 
					
						
							|  |  |  |                 shortcut: "Q" | 
					
						
							|  |  |  |                 currentShortcut: selected ? "" : shortcut | 
					
						
							|  |  |  |                 tool: "item_selection" | 
					
						
							|  |  |  |                 buttonsGroup: col.group | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ToolbarButton { | 
					
						
							|  |  |  |                 id: btnSelectGroup | 
					
						
							|  |  |  |                 tooltip: qsTr("Select Group") | 
					
						
							|  |  |  |                 shortcut: "Q" | 
					
						
							|  |  |  |                 currentShortcut: btnSelectItem.currentShortcut === shortcut ? "" : shortcut | 
					
						
							|  |  |  |                 tool: "group_selection" | 
					
						
							|  |  |  |                 buttonsGroup: col.group | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             Rectangle { // separator
 | 
					
						
							|  |  |  |                 width: 25 | 
					
						
							|  |  |  |                 height: 1 | 
					
						
							|  |  |  |                 color: "#f1f1f1" | 
					
						
							|  |  |  |                 anchors.horizontalCenter: parent.horizontalCenter | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ToolbarButton { | 
					
						
							|  |  |  |                 id: btnMove | 
					
						
							|  |  |  |                 tooltip: qsTr("Move current selection") | 
					
						
							|  |  |  |                 shortcut: "M" | 
					
						
							|  |  |  |                 currentShortcut: shortcut | 
					
						
							|  |  |  |                 tool: "move" | 
					
						
							|  |  |  |                 buttonsGroup: col.group | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ToolbarButton { | 
					
						
							|  |  |  |                 id: btnRotate | 
					
						
							|  |  |  |                 tooltip: qsTr("Rotate current selection") | 
					
						
							|  |  |  |                 shortcut: "E" | 
					
						
							|  |  |  |                 currentShortcut: shortcut | 
					
						
							|  |  |  |                 tool: "rotate" | 
					
						
							|  |  |  |                 buttonsGroup: col.group | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ToolbarButton { | 
					
						
							|  |  |  |                 id: btnScale | 
					
						
							|  |  |  |                 tooltip: qsTr("Scale current selection") | 
					
						
							|  |  |  |                 shortcut: "T" | 
					
						
							|  |  |  |                 currentShortcut: shortcut | 
					
						
							|  |  |  |                 tool: "scale" | 
					
						
							|  |  |  |                 buttonsGroup: col.group | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |     Column { | 
					
						
							|  |  |  |         y: 8 | 
					
						
							| 
									
										
										
										
											2019-11-08 15:05:36 +02:00
										 |  |  |         anchors.right: parent.right | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |         CheckBox { | 
					
						
							|  |  |  |             id: editLightCheckbox | 
					
						
							|  |  |  |             checked: false | 
					
						
							|  |  |  |             text: qsTr("Use Edit View Light") | 
					
						
							|  |  |  |             onCheckedChanged: cameraControl.forceActiveFocus() | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  |         CheckBox { | 
					
						
							|  |  |  |             id: usePerspectiveCheckbox | 
					
						
							|  |  |  |             checked: true | 
					
						
							|  |  |  |             text: qsTr("Use Perspective Projection") | 
					
						
							|  |  |  |             onCheckedChanged: cameraControl.forceActiveFocus() | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         CheckBox { | 
					
						
							|  |  |  |             id: globalControl | 
					
						
							|  |  |  |             checked: true | 
					
						
							| 
									
										
										
										
											2019-10-25 14:44:55 +03:00
										 |  |  |             text: qsTr("Use Global Orientation") | 
					
						
							| 
									
										
										
										
											2019-10-23 16:02:56 +03:00
										 |  |  |             onCheckedChanged: cameraControl.forceActiveFocus() | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-10-15 14:54:20 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Text { | 
					
						
							|  |  |  |         id: helpText | 
					
						
							|  |  |  |         text: qsTr("Camera: W,A,S,D,R,F,right mouse drag") | 
					
						
							|  |  |  |         anchors.bottom: parent.bottom | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-09-27 18:52:06 +02:00
										 |  |  | } |