aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml
diff options
context:
space:
mode:
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml')
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml151
1 files changed, 126 insertions, 25 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml
index db8d4fb4ea..2bf81b837f 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml
@@ -54,7 +54,7 @@ Item {
property Node selectedNode: null // This is non-null only in single selection case
property var selectedNodes: [] // All selected nodes
- property var lightGizmos: []
+ property var lightIconGizmos: []
property var cameraGizmos: []
property var selectionBoxes: []
property rect viewPortRect: Qt.rect(0, 0, 1000, 1000)
@@ -107,10 +107,22 @@ Item {
if (createEditView()) {
if (activeScene) {
var toolStates = _generalHelper.getToolStates(sceneId);
- if (Object.keys(toolStates).length > 0)
+ if (Object.keys(toolStates).length > 0) {
updateToolStates(toolStates, true);
- else
+ } else {
+ // Don't inherit the edit light state from the previous scene, but rather
+ // turn the edit light on for scenes that do not have any scene
+ // lights, and turn it off for scenes that have.
+ var hasSceneLight = false;
+ for (var i = 0; i < lightIconGizmos.length; ++i) {
+ if (lightIconGizmos[i].scene === activeScene) {
+ hasSceneLight = true;
+ break;
+ }
+ }
+ showEditLight = !hasSceneLight;
storeCurrentToolStates();
+ }
} else {
// When active scene is deleted, this function gets called by object deletion
// handlers without going through setActiveScene, so make sure sceneId is cleared.
@@ -141,12 +153,20 @@ Item {
_generalHelper.enableItemUpdate(editView, (scene && scene === activeScene));
}
+ function handleActiveSceneIdChange(newId)
+ {
+ if (sceneId !== newId) {
+ sceneId = newId;
+ storeCurrentToolStates();
+ }
+ }
+
function fitToView()
{
if (editView) {
var targetNode = selectionBoxes.length > 0
? selectionBoxes[0].model : null;
- cameraControl.focusObject(targetNode, editView.camera.eulerRotation, true);
+ cameraControl.focusObject(targetNode, editView.camera.eulerRotation, true, false);
}
}
@@ -278,29 +298,25 @@ Item {
function addLightGizmo(scene, obj)
{
// Insert into first available gizmo
- for (var i = 0; i < lightGizmos.length; ++i) {
- if (!lightGizmos[i].targetNode) {
- lightGizmos[i].scene = scene;
- lightGizmos[i].targetNode = obj;
+ for (var i = 0; i < lightIconGizmos.length; ++i) {
+ if (!lightIconGizmos[i].targetNode) {
+ lightIconGizmos[i].scene = scene;
+ lightIconGizmos[i].targetNode = obj;
return;
}
}
// No free gizmos available, create a new one
- var gizmoComponent = Qt.createComponent("LightGizmo.qml");
- var modelComponent = Qt.createComponent("LightModel.qml");
- if (gizmoComponent.status === Component.Ready && modelComponent.status === Component.Ready) {
- var geometryName = _generalHelper.generateUniqueName("LightGeometry");
- var model = modelComponent.createObject(overlayScene, {"geometryName": geometryName});
+ var gizmoComponent = Qt.createComponent("LightIconGizmo.qml");
+ if (gizmoComponent.status === Component.Ready) {
var gizmo = gizmoComponent.createObject(overlayView,
{"view3D": overlayView, "targetNode": obj,
"selectedNodes": selectedNodes, "scene": scene,
"activeScene": activeScene});
- lightGizmos[lightGizmos.length] = gizmo;
+ lightIconGizmos[lightIconGizmos.length] = gizmo;
gizmo.clicked.connect(handleObjectClicked);
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
gizmo.activeScene = Qt.binding(function() {return activeScene;});
- gizmo.connectModel(model);
}
}
@@ -338,10 +354,10 @@ Item {
function releaseLightGizmo(obj)
{
- for (var i = 0; i < lightGizmos.length; ++i) {
- if (lightGizmos[i].targetNode === obj) {
- lightGizmos[i].scene = null;
- lightGizmos[i].targetNode = null;
+ for (var i = 0; i < lightIconGizmos.length; ++i) {
+ if (lightIconGizmos[i].targetNode === obj) {
+ lightIconGizmos[i].scene = null;
+ lightIconGizmos[i].targetNode = null;
return;
}
}
@@ -360,9 +376,9 @@ Item {
function updateLightGizmoScene(scene, obj)
{
- for (var i = 0; i < lightGizmos.length; ++i) {
- if (lightGizmos[i].targetNode === obj) {
- lightGizmos[i].scene = scene;
+ for (var i = 0; i < lightIconGizmos.length; ++i) {
+ if (lightIconGizmos[i].targetNode === obj) {
+ lightIconGizmos[i].scene = scene;
return;
}
}
@@ -455,6 +471,16 @@ Item {
onRotateChange: viewRoot.changeObjectProperty(viewRoot.selectedNode, "eulerRotation")
}
+ LightGizmo {
+ id: lightGizmo
+ targetNode: viewRoot.selectedNode
+ view3D: overlayView
+ dragHelper: gizmoDragHelper
+
+ onPropertyValueCommit: viewRoot.commitObjectProperty(targetNode, propName)
+ onPropertyValueChange: viewRoot.changeObjectProperty(targetNode, propName)
+ }
+
AutoScaleHelper {
id: autoScale
view3D: overlayView
@@ -517,15 +543,60 @@ Item {
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
- onClicked: {
+ hoverEnabled: false
+
+ property MouseArea3D freeDraggerArea
+ property point pressPoint
+ property bool initialMoveBlock: false
+
+ onPressed: {
if (viewRoot.editView) {
var pickResult = viewRoot.editView.pick(mouse.x, mouse.y);
handleObjectClicked(_generalHelper.resolvePick(pickResult.objectHit),
mouse.modifiers & Qt.ControlModifier);
- if (!pickResult.objectHit)
+
+ if (pickResult.objectHit) {
+ if (transformMode === EditView3D.TransformMode.Move)
+ freeDraggerArea = moveGizmo.freeDraggerArea;
+ else if (transformMode === EditView3D.TransformMode.Rotate)
+ freeDraggerArea = rotateGizmo.freeDraggerArea;
+ else if (transformMode === EditView3D.TransformMode.Scale)
+ freeDraggerArea = scaleGizmo.freeDraggerArea;
+ pressPoint.x = mouse.x;
+ pressPoint.y = mouse.y;
+ initialMoveBlock = true;
+ } else {
mouse.accepted = false;
+ }
}
}
+ onPositionChanged: {
+ if (freeDraggerArea) {
+ if (initialMoveBlock && Math.abs(pressPoint.x - mouse.x) + Math.abs(pressPoint.y - mouse.y) > 10) {
+ // Don't force press event at actual press, as that puts the gizmo
+ // in free-dragging state, which is bad UX if drag is not actually done
+ freeDraggerArea.forcePressEvent(pressPoint.x, pressPoint.y);
+ freeDraggerArea.forceMoveEvent(mouse.x, mouse.y);
+ initialMoveBlock = false;
+ } else {
+ freeDraggerArea.forceMoveEvent(mouse.x, mouse.y);
+ }
+ }
+ }
+
+ function handleRelease(mouse)
+ {
+ if (freeDraggerArea) {
+ if (initialMoveBlock)
+ freeDraggerArea.forceReleaseEvent(pressPoint.x, pressPoint.y);
+ else
+ freeDraggerArea.forceReleaseEvent(mouse.x, mouse.y);
+ freeDraggerArea = null;
+ }
+ }
+
+ onReleased: handleRelease(mouse)
+ onCanceled: handleRelease(mouse)
}
DropArea {
@@ -586,6 +657,7 @@ Item {
border.width: 1
visible: rotateGizmo.dragging
parent: rotateGizmo.view3D
+ z: 3
Text {
id: rotateGizmoLabelText
@@ -593,7 +665,7 @@ Item {
var l = Qt.locale();
if (rotateGizmo.targetNode) {
var degrees = rotateGizmo.currentAngle * (180 / Math.PI);
- return qsTr(Number(degrees).toLocaleString(l, 'f', 1));
+ return Number(degrees).toLocaleString(l, 'f', 1);
} else {
return "";
}
@@ -602,6 +674,25 @@ Item {
}
}
+ Rectangle {
+ id: lightGizmoLabel
+ color: "white"
+ x: lightGizmo.currentMousePos.x - (10 + width)
+ y: lightGizmo.currentMousePos.y - (10 + height)
+ width: lightGizmoLabelText.width + 4
+ height: lightGizmoLabelText.height + 4
+ border.width: 1
+ visible: lightGizmo.dragging
+ parent: lightGizmo.view3D
+ z: 3
+
+ Text {
+ id: lightGizmoLabelText
+ text: lightGizmo.currentLabel
+ anchors.centerIn: parent
+ }
+ }
+
EditCameraController {
id: cameraControl
camera: viewRoot.editView ? viewRoot.editView.camera : null
@@ -619,5 +710,15 @@ Item {
editCameraCtrl: cameraControl
selectedNode : viewRoot.selectedNodes.length ? selectionBoxes[0].model : null
}
+
+ Text {
+ id: sceneLabel
+ text: viewRoot.sceneId
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.margins: 4
+ font.pixelSize: 14
+ color: "white"
+ }
}
}