summaryrefslogtreecommitdiff
path: root/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml
diff options
context:
space:
mode:
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml')
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml126
1 files changed, 126 insertions, 0 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml
new file mode 100644
index 0000000000..7c9ef09589
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** 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.
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick3D 1.0
+import MouseArea3D 1.0
+
+Model {
+ id: arrow
+ rotationOrder: Node.XYZr
+ source: "meshes/Arrow.mesh"
+
+ property View3D view3D
+ property alias color: material.emissiveColor
+ property Node targetNode: null
+
+ readonly property bool hovering: mouseAreaYZ.hovering || mouseAreaXZ.hovering
+
+ property var _pointerPosPressed
+ property var _targetStartPos
+
+ signal positionCommit()
+
+ materials: DefaultMaterial {
+ id: material
+ emissiveColor: mouseAreaFront.hovering ? "white" : Qt.rgba(1.0, 0.0, 0.0, 1.0)
+ lighting: DefaultMaterial.NoLighting
+ }
+
+ function handlePressed(mouseArea, pointerPosition)
+ {
+ if (!targetNode)
+ return;
+
+ var maskedPosition = Qt.vector3d(pointerPosition.x, 0, 0);
+ _pointerPosPressed = mouseArea.mapPositionToScene(maskedPosition);
+ var sp = targetNode.positionInScene;
+ _targetStartPos = Qt.vector3d(sp.x, sp.y, sp.z);
+ }
+
+ function posInParent(mouseArea, pointerPosition)
+ {
+ var maskedPosition = Qt.vector3d(pointerPosition.x, 0, 0);
+ var scenePointerPos = mouseArea.mapPositionToScene(maskedPosition);
+ var sceneRelativeDistance = Qt.vector3d(
+ scenePointerPos.x - _pointerPosPressed.x,
+ scenePointerPos.y - _pointerPosPressed.y,
+ scenePointerPos.z - _pointerPosPressed.z);
+
+ var newScenePos = Qt.vector3d(
+ _targetStartPos.x + sceneRelativeDistance.x,
+ _targetStartPos.y + sceneRelativeDistance.y,
+ _targetStartPos.z + sceneRelativeDistance.z);
+
+ return targetNode.parent.mapPositionFromScene(newScenePos);
+ }
+
+ function handleDragged(mouseArea, pointerPosition)
+ {
+ if (!targetNode)
+ return;
+
+ targetNode.position = posInParent(mouseArea, pointerPosition);
+ }
+
+ function handleReleased(mouseArea, pointerPosition)
+ {
+ if (!targetNode)
+ return;
+
+ targetNode.position = posInParent(mouseArea, pointerPosition);
+ arrow.positionCommit();
+ }
+
+ MouseArea3D {
+ id: mouseAreaYZ
+ view3D: arrow.view3D
+ x: 0
+ y: -1.5
+ width: 12
+ height: 3
+ rotation: Qt.vector3d(0, 90, 0)
+ grabsMouse: targetNode
+ onPressed: arrow.handlePressed(mouseAreaYZ, pointerPosition)
+ onDragged: arrow.handleDragged(mouseAreaYZ, pointerPosition)
+ onReleased: arrow.handleReleased(mouseAreaYZ, pointerPosition)
+ }
+
+ MouseArea3D {
+ id: mouseAreaXZ
+ view3D: arrow.view3D
+ x: 0
+ y: -1.5
+ width: 12
+ height: 3
+ rotation: Qt.vector3d(90, 90, 0)
+ grabsMouse: targetNode
+ onPressed: arrow.handlePressed(mouseAreaXZ, pointerPosition)
+ onDragged: arrow.handleDragged(mouseAreaXZ, pointerPosition)
+ onReleased: arrow.handleReleased(mouseAreaXZ, pointerPosition)
+ }
+
+}
+