summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanny Pope <daniel.pope@nokia.com>2012-01-16 12:41:08 +1000
committerDanny Pope <daniel.pope@nokia.com>2012-02-01 03:01:25 +0100
commit6dfd2cc32bd631681e6a2e33bd489c1732a0af03 (patch)
treeafaaa8a954ebffeaf9be78ee2277c71a61f261dd
parent2f085b274b6fc597b79e837a5b2cf896c9a32e58 (diff)
Fix Model Tweaker "Lock" icon not working.
Turns out it was never implemented in any way to begin with. Task-number: QTBUG-23546 Change-Id: I74a5c8e205ad3877e994aa54953866d3acdcc27d Reviewed-by: Danny Pope <daniel.pope@nokia.com>
-rw-r--r--util/qt3d/modeltweak/qml/BlenderValueSlider.qml40
-rw-r--r--util/qt3d/modeltweak/qml/ModelPropertiesPane.qml145
-rw-r--r--util/qt3d/modeltweak/qml/ModelTweak.qml36
-rw-r--r--util/qt3d/modeltweak/qml/images/unlock.pngbin0 -> 292 bytes
4 files changed, 189 insertions, 32 deletions
diff --git a/util/qt3d/modeltweak/qml/BlenderValueSlider.qml b/util/qt3d/modeltweak/qml/BlenderValueSlider.qml
index 1904aaf78..6203d020c 100644
--- a/util/qt3d/modeltweak/qml/BlenderValueSlider.qml
+++ b/util/qt3d/modeltweak/qml/BlenderValueSlider.qml
@@ -12,6 +12,7 @@ Item {
property double min: -1;
property bool limitMax: false;
property bool limitMin: false;
+ property bool locked: false
width: rect.width
height: 20
@@ -21,6 +22,7 @@ Item {
signal next
signal prev
signal gotFocus
+ signal fail
Rectangle {
id: rect
@@ -45,8 +47,10 @@ Item {
visible: true
}
+
TextInput {
id: textInput
+ readOnly: valueSlider.locked
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: TextInput.AlignHCenter
@@ -91,12 +95,17 @@ Item {
onExited: parent.color = "#B4B4B4"
hoverEnabled: true
onClicked: {
- if (mouse.x<width/3)
- decDelta();
- else if (mouse.x>width/3*2)
- incDelta();
- else {
- valueSlider.gotFocus()
+ if (!valueSlider.locked)
+ {
+ if (mouse.x<width/3)
+ decDelta();
+ else if (mouse.x>width/3*2)
+ incDelta();
+ else {
+ valueSlider.gotFocus()
+ }
+ } else {
+ valueSlider.fail();
}
}
@@ -109,14 +118,14 @@ Item {
interval: 100;
running: mouseArea.pressedButtons & Qt.LeftButton && (mouseArea.mouseX > valueSlider.width/3*2)
repeat: true
- onTriggered: incDelta()
+ onTriggered: if (!valueSlider.locked) incDelta()
}
Timer {
interval: 100;
running: mouseArea.pressedButtons & Qt.LeftButton && (mouseArea.mouseX < valueSlider.width/3)
repeat: true
- onTriggered: decDelta()
+ onTriggered: if (!valueSlider.locked) decDelta()
}
function updateMe() {
@@ -149,7 +158,16 @@ Item {
onFocusChanged: if (focus) valueSlider.gotFocus()
- Keys.onUpPressed: incDelta()
- Keys.onDownPressed: decDelta()
- Keys.onReturnPressed: updateMe()
+ Keys.onUpPressed: {
+ if (!valueSlider.locked) incDelta();
+ else valueSlider.fail();
+ }
+ Keys.onDownPressed: {
+ if (!valueSlider.locked) decDelta();
+ else valueSlider.fail();
+ }
+ Keys.onReturnPressed: {
+ if (!valueSlider.locked) updateMe();
+ else valueSlider.fail();
+ }
}
diff --git a/util/qt3d/modeltweak/qml/ModelPropertiesPane.qml b/util/qt3d/modeltweak/qml/ModelPropertiesPane.qml
index 2c3c96fd7..8fa9988d0 100644
--- a/util/qt3d/modeltweak/qml/ModelPropertiesPane.qml
+++ b/util/qt3d/modeltweak/qml/ModelPropertiesPane.qml
@@ -7,8 +7,13 @@ Column {
height: parent.height
spacing: 4
+ property alias rotateLocked: imageR.isLocked
+ property alias scaleLocked: imageS.isLocked
+ property alias translateLocked: imageP.isLocked;
+
// POSITION
Item {
+ id: positionPanel
width: parent.width
height: imageP.height
@@ -22,43 +27,88 @@ Column {
id: imageP
anchors.right: parent.right
anchors.rightMargin: 8
- source: "images/lock.png"
+
+ //Animation to pulse the lock icon if attempting to modify while locked.
+ property bool bounce: false
+
+ SequentialAnimation on scale{
+ running: imageP.bounce
+ NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
+ onCompleted: imageP.bounce = false
+ }
+
+ //Manage locked/unlocked state
+ state: "UNLOCKED"
+ property bool isLocked: false
+
+ states: [
+ State {
+ name: "UNLOCKED"
+ PropertyChanges { target: imageP; source: "images/unlock.png"}
+ PropertyChanges { target: imageP; isLocked: false;}
+ },
+ State {
+ name: "LOCKED"
+ PropertyChanges { target: imageP; source: "images/lock.png"}
+ PropertyChanges { target: imageP; isLocked: true;}
+ }
+ ]
+
+ MouseArea {
+ anchors.fill: parent
+ onDoubleClicked: {
+ if (parent.state=="LOCKED")
+ parent.state="UNLOCKED"
+ else
+ parent.state="LOCKED"
+ }
+ }
}
}
BlenderValueSlider {
focus: true
id: posX
label: "X:"
+ locked: imageP.isLocked
value: transformTranslate.translate.x.toFixed(3)
function update (f) {
transformTranslate.translate = Qt.vector3d(f, transformTranslate.translate.y, transformTranslate.translate.z);
}
onNext: { updateMe(); focus = false; posY.focus = true; }
onPrev: { updateMe(); focus = false; scaleZ.focus = true; }
+ onFail: { imageP.bounce=true; }
}
BlenderValueSlider {
id: posY
label: "Y:"
+ locked: imageP.isLocked
value: transformTranslate.translate.y.toFixed(3)
function update (f) {
transformTranslate.translate = Qt.vector3d(transformTranslate.translate.x, f, transformTranslate.translate.z);
}
onNext: { updateMe(); focus = false; posZ.focus = true; }
onPrev: { updateMe(); focus = false; posX.focus = true; }
+ onFail: { imageP.bounce=true; }
}
BlenderValueSlider {
id: posZ
label: "Z:"
+ locked: imageP.isLocked
value: transformTranslate.translate.z.toFixed(3)
function update (f) {
transformTranslate.translate = Qt.vector3d(transformTranslate.translate.x, transformTranslate.translate.y, f);
}
onNext: { updateMe(); focus = false; rotX.focus = true; }
onPrev: { updateMe(); focus = false; posY.focus = true; }
+ onFail: { imageP.bounce=true; }
}
// ROTATE
Item {
+ id: rotationPanel
width: parent.width
height: imageR.height
@@ -72,45 +122,90 @@ Column {
id: imageR
anchors.right: parent.right
anchors.rightMargin: 8
- source: "images/lock.png"
+
+ //Animation to pulse the lock icon if attempting to modify while locked.
+ property bool bounce: false
+
+ SequentialAnimation on scale{
+ running: imageR.bounce
+ NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
+ onCompleted: imageR.bounce = false
+ }
+
+ //Manage locked/unlocked state
+ state: "UNLOCKED"
+ property bool isLocked: false
+
+ states: [
+ State {
+ name: "UNLOCKED"
+ PropertyChanges { target: imageR; source: "images/unlock.png"}
+ PropertyChanges { target: imageR; isLocked: false;}
+ },
+ State {
+ name: "LOCKED"
+ PropertyChanges { target: imageR; source: "images/lock.png"}
+ PropertyChanges { target: imageR; isLocked: true;}
+ }
+ ]
+
+ MouseArea {
+ anchors.fill: parent
+ onDoubleClicked: {
+ if (parent.state=="LOCKED")
+ parent.state="UNLOCKED"
+ else
+ parent.state="LOCKED"
+ }
+ }
}
}
BlenderValueSlider {
id: rotX
label: "X:"
delta: 1
+ locked: imageR.isLocked
min: 0; limitMin: true
max: 360; limitMax: true
value: transformRotateX.angle.toFixed(3)
function update (f) { transformRotateX.angle = f }
onNext: { updateMe(); focus = false; rotY.focus = true; }
onPrev: { updateMe(); focus = false; posZ.focus = true; }
+ onFail: { imageR.bounce=true; }
}
BlenderValueSlider {
id: rotY
label: "Y:"
delta: 1
+ locked: imageR.isLocked
min: 0; limitMin: true
max: 360; limitMax: true
value: transformRotateY.angle.toFixed(3)
function update (f) { transformRotateY.angle = f }
onNext: { updateMe(); focus = false; rotZ.focus = true; }
onPrev: { updateMe(); focus = false; rotX.focus = true; }
+ onFail: { imageR.bounce=true; }
}
BlenderValueSlider {
id: rotZ
label: "Z:"
delta: 1
+ locked: imageR.isLocked
min: 0; limitMin: true
max: 360; limitMax: true
value: transformRotateZ.angle.toFixed(3)
function update (f) { transformRotateZ.angle = f }
onNext: { updateMe(); focus = false; scaleX.focus = true; }
onPrev: { updateMe(); focus = false; rotY.focus = true; }
+ onFail: { imageR.bounce=true; }
}
// SCALE
Item {
+ id: scalePanel
width: parent.width
height: imageS.height
@@ -124,34 +219,78 @@ Column {
id: imageS
anchors.right: parent.right
anchors.rightMargin: 8
- source: "images/lock.png"
+
+ //Animation to pulse the lock icon if attempting to modify while locked.
+ property bool bounce: false
+
+ SequentialAnimation on scale{
+ running: imageS.bounce
+ NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 2.0; duration: 150; easing.type: "OutQuad" }
+ NumberAnimation { to : 1.0; duration: 150; easing.type: "OutQuad" }
+ onCompleted: imageS.bounce = false
+ }
+
+ //Manage locked/unlocked state
+ state: "UNLOCKED"
+ property bool isLocked: false
+
+ states: [
+ State {
+ name: "UNLOCKED"
+ PropertyChanges { target: imageS; source: "images/unlock.png"}
+ PropertyChanges { target: imageS; isLocked: false;}
+ },
+ State {
+ name: "LOCKED"
+ PropertyChanges { target: imageS; source: "images/lock.png"}
+ PropertyChanges { target: imageS; isLocked: true;}
+ }
+ ]
+
+ MouseArea {
+ anchors.fill: parent
+ onDoubleClicked: {
+ if (parent.state=="LOCKED")
+ parent.state="UNLOCKED"
+ else
+ parent.state="LOCKED"
+ }
+ }
}
}
BlenderValueSlider {
id: scaleX
label: "X:"
+ locked: imageS.isLocked
min: 0; limitMin: true
value: transformScale.scale.x.toFixed(3)
function update (f) { transformScale.scale = Qt.vector3d(f, transformScale.scale.y, transformScale.scale.z); }
onNext: { updateMe(); focus = false; scaleY.focus = true; }
onPrev: { updateMe(); focus = false; rotZ.focus = true; }
+ onFail: { imageS.bounce=true; }
}
BlenderValueSlider {
id: scaleY
label: "Y:"
+ locked: imageS.isLocked
min: 0; limitMin: true
value: transformScale.scale.y.toFixed(3)
function update (f) { transformScale.scale = Qt.vector3d(transformScale.scale.x, f, transformScale.scale.z); }
onNext: { updateMe(); focus = false; scaleZ.focus = true; }
onPrev: { updateMe(); focus = false; scaleX.focus = true; }
+ onFail: { imageS.bounce=true; }
}
BlenderValueSlider {
id: scaleZ
label: "Z:"
+ locked: imageS.isLocked
min: 0; limitMin: true
value: transformScale.scale.z.toFixed(3)
function update (f) { transformScale.scale = Qt.vector3d(transformScale.scale.x, transformScale.scale.y, f); }
onNext: { updateMe(); focus = false; posX.focus = true; }
onPrev: { updateMe(); focus = false; scaleY.focus = true; }
+ onFail: { imageS.bounce=true; }
}
}
diff --git a/util/qt3d/modeltweak/qml/ModelTweak.qml b/util/qt3d/modeltweak/qml/ModelTweak.qml
index e7dc57fa2..f3b1bc6cc 100644
--- a/util/qt3d/modeltweak/qml/ModelTweak.qml
+++ b/util/qt3d/modeltweak/qml/ModelTweak.qml
@@ -76,15 +76,15 @@ Rectangle {
property alias position: transformTranslate.translate;
- onMouseTranslateX: position = Qt.vector3d(position.x, position.y, translate.z + (down.x - mouse.x)/translateSensitivity)
- onMouseTranslateY: position = Qt.vector3d(position.x, translate.y + (down.y - mouse.y)/translateSensitivity, position.z)
- onMouseRotateX: transformRotateY.angle = rotate.y - (down.x - mouse.x)/rotateSensitivity
- onMouseRotateY: transformRotateZ.angle = rotate.z - (down.y - mouse.y)/rotateSensitivity
- onMouseScaleX: {
+ onMouseTranslateX: if (!modelPropertiesPane.translateLocked) position = Qt.vector3d(position.x, position.y, translate.z + (down.x - mouse.x)/translateSensitivity)
+ onMouseTranslateY: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(position.x, translate.y + (down.y - mouse.y)/translateSensitivity, position.z)
+ onMouseRotateX: if (!modelPropertiesPane.rotateLocked)transformRotateY.angle = rotate.y - (down.x - mouse.x)/rotateSensitivity
+ onMouseRotateY: if (!modelPropertiesPane.rotateLocked)transformRotateZ.angle = rotate.z - (down.y - mouse.y)/rotateSensitivity
+ onMouseScaleX: if (!modelPropertiesPane.scaleLocked) {
var s = scale3d.z - (down.x - mouse.x)/scaleSensitivity;
transformScale.scale = Qt.vector3d(transformScale.scale.x, transformScale.scale.y, s<0 ? 0 : s)
}
- onMouseScaleY: {
+ onMouseScaleY: if (!modelPropertiesPane.scaleLocked) {
var s = scale3d.y + (down.y - mouse.y)/scaleSensitivity;
transformScale.scale = Qt.vector3d(transformScale.scale.x, s<0 ? 0 : s, transformScale.scale.z)
}
@@ -100,15 +100,15 @@ Rectangle {
property alias position: transformTranslate.translate;
- onMouseTranslateX: position = Qt.vector3d(translate.x - (down.x - mouse.x)/translateSensitivity, position.y, position.z)
- onMouseTranslateY: position = Qt.vector3d(position.x, translate.y + (down.y - mouse.y)/translateSensitivity, position.z)
- onMouseRotateX: transformRotateY.angle = rotate.y - (down.x - mouse.x)/rotateSensitivity
- onMouseRotateY: transformRotateX.angle = rotate.x - (down.y - mouse.y)/rotateSensitivity
- onMouseScaleX: {
+ onMouseTranslateX: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(translate.x - (down.x - mouse.x)/translateSensitivity, position.y, position.z)
+ onMouseTranslateY: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(position.x, translate.y + (down.y - mouse.y)/translateSensitivity, position.z)
+ onMouseRotateX: if (!modelPropertiesPane.rotateLocked) transformRotateY.angle = rotate.y - (down.x - mouse.x)/rotateSensitivity
+ onMouseRotateY: if (!modelPropertiesPane.rotateLocked) transformRotateX.angle = rotate.x - (down.y - mouse.y)/rotateSensitivity
+ onMouseScaleX: if (!modelPropertiesPane.scaleLocked) {
var s = scale3d.x - (down.x - mouse.x)/scaleSensitivity
transformScale.scale = Qt.vector3d(s<0 ? 0 : s, transformScale.scale.y, transformScale.scale.z)
}
- onMouseScaleY: {
+ onMouseScaleY: if (!modelPropertiesPane.scaleLocked) {
var s = scale3d.y + (down.y - mouse.y)/scaleSensitivity
transformScale.scale = Qt.vector3d(transformScale.scale.x, s<0 ? 0 : s, transformScale.scale.z)
}
@@ -125,15 +125,15 @@ Rectangle {
property alias position: transformTranslate.translate;
- onMouseTranslateX: position = Qt.vector3d(translate.x - (down.x - mouse.x)/translateSensitivity, position.y, position.z)
- onMouseTranslateY: position = Qt.vector3d(position.x, position.y, translate.z - (down.y - mouse.y)/translateSensitivity)
- onMouseRotateX: transformRotateZ.angle = rotate.z + (down.x - mouse.x)/rotateSensitivity
- onMouseRotateY: transformRotateX.angle = rotate.x - (down.y - mouse.y)/rotateSensitivity
- onMouseScaleX: {
+ onMouseTranslateX: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(translate.x - (down.x - mouse.x)/translateSensitivity, position.y, position.z)
+ onMouseTranslateY: if (!modelPropertiesPane.translateLocked)position = Qt.vector3d(position.x, position.y, translate.z - (down.y - mouse.y)/translateSensitivity)
+ onMouseRotateX: if (!modelPropertiesPane.rotateLocked)transformRotateZ.angle = rotate.z + (down.x - mouse.x)/rotateSensitivity
+ onMouseRotateY: if (!modelPropertiesPane.rotateLocked)transformRotateX.angle = rotate.x - (down.y - mouse.y)/rotateSensitivity
+ onMouseScaleX: if (!modelPropertiesPane.scaleLocked) {
var s = scale3d.x - (down.x - mouse.x)/scaleSensitivity;
transformScale.scale = Qt.vector3d(s<0 ? 0 : s, transformScale.scale.y, transformScale.scale.z)
}
- onMouseScaleY: {
+ onMouseScaleY: if (!modelPropertiesPane.scaleLocked) {
var s = scale3d.z + (down.y - mouse.y)/scaleSensitivity;
transformScale.scale = Qt.vector3d(transformScale.scale.x, transformScale.scale.y, s<0 ? 0 : s)
}
diff --git a/util/qt3d/modeltweak/qml/images/unlock.png b/util/qt3d/modeltweak/qml/images/unlock.png
new file mode 100644
index 000000000..80c3f9452
--- /dev/null
+++ b/util/qt3d/modeltweak/qml/images/unlock.png
Binary files differ