From 9dac42f153b42c057713aadfa48aa2873643b2f3 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 21 Nov 2019 11:13:19 +0200 Subject: [PATCH] QmlDesigner: Implement fit selection button in 3D edit view Shortcuts for scale and move were also updated to correct ones. Change-Id: Iffcad0c81475553003962e65dc059879a237546e Fixes: QDS-1235 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../qml/qmlpuppet/mockfiles/EditView3D.qml | 39 ++++++++++++++---- .../qml/qmlpuppet/mockfiles/ToolBarButton.qml | 6 +++ .../qmlpuppet/mockfiles/images/fit_active.png | Bin 0 -> 266 bytes .../mockfiles/images/fit_active@2x.png | Bin 0 -> 386 bytes .../mockfiles/images/fit_selected.png | Bin 0 -> 266 bytes .../mockfiles/images/fit_selected@2x.png | Bin 0 -> 386 bytes .../qml2puppet/editor3d/generalhelper.cpp | 8 ++++ .../qml2puppet/editor3d/generalhelper.h | 2 + share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc | 4 ++ 9 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/fit_active.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/fit_active@2x.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/fit_selected.png create mode 100644 share/qtcreator/qml/qmlpuppet/mockfiles/images/fit_selected@2x.png diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index 19443113ee3..56faf67ec41 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -300,7 +300,8 @@ Window { spacing: 5 padding: 5 - property var group: [btnSelectItem, btnSelectGroup, btnMove, btnRotate, btnScale] + property var groupSelect: [btnSelectGroup, btnSelectItem] + property var groupTransform: [btnMove, btnRotate, btnScale] ToolBarButton { id: btnSelectItem @@ -309,7 +310,7 @@ Window { shortcut: "Q" currentShortcut: selected ? "" : shortcut tool: "item_selection" - buttonsGroup: col.group + buttonsGroup: col.groupSelect } ToolBarButton { @@ -318,7 +319,7 @@ Window { shortcut: "Q" currentShortcut: btnSelectItem.currentShortcut === shortcut ? "" : shortcut tool: "group_selection" - buttonsGroup: col.group + buttonsGroup: col.groupSelect } Rectangle { // separator @@ -330,11 +331,12 @@ Window { ToolBarButton { id: btnMove + selected: true tooltip: qsTr("Move current selection") - shortcut: "M" + shortcut: "W" currentShortcut: shortcut tool: "move" - buttonsGroup: col.group + buttonsGroup: col.groupTransform } ToolBarButton { @@ -343,16 +345,37 @@ Window { shortcut: "E" currentShortcut: shortcut tool: "rotate" - buttonsGroup: col.group + buttonsGroup: col.groupTransform } ToolBarButton { id: btnScale tooltip: qsTr("Scale current selection") - shortcut: "T" + shortcut: "R" currentShortcut: shortcut tool: "scale" - buttonsGroup: col.group + buttonsGroup: col.groupTransform + } + + Rectangle { // separator + width: 25 + height: 1 + color: "#f1f1f1" + anchors.horizontalCenter: parent.horizontalCenter + } + + ToolBarButton { + id: btnFit + tooltip: qsTr("Fit camera to current selection") + shortcut: "F" + currentShortcut: shortcut + tool: "fit" + togglable: false + + onSelectedChanged: { + if (selected) + cameraControl.fitObject(viewWindow.selectedNode, editView.camera.rotation); + } } } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/ToolBarButton.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/ToolBarButton.qml index cbc450ed2bc..38a8608e475 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/ToolBarButton.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/ToolBarButton.qml @@ -34,6 +34,7 @@ Rectangle { property string currentShortcut property string tool property variant buttonsGroup: [] + property bool togglable: true id: root width: img.width + 5 @@ -71,6 +72,11 @@ Rectangle { root.buttonsGroup[i].selected = false; root.selected = true; + + if (!root.togglable) { + // Deselect button after a short while (selection acts as simple click indicator) + _generalHelper.delayedPropertySet(root, 200, "selected", false); + } } } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/fit_active.png b/share/qtcreator/qml/qmlpuppet/mockfiles/images/fit_active.png new file mode 100644 index 0000000000000000000000000000000000000000..056e9ec3c8b690fa708232ff38f26bd477ca91ae GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|7G?$p2BAoW(+ms@iUB?$t_%ze|M7zJim!h% zFfeeH1o;IsFmegVD|Aes_kFM4?BUDd zmXO#X6v5&Uq!g)e&d7a()wWQDbE{Yk)VU8uvQ2C#I1qH^*fF=c##4HGc@>rwuZgMG6~mKvvKSfy(?M7(iWEXms7Cf;x-jCEtW<&E4&0)C1Sve}{?n{61*6pFAH q3b`JbC!C{3i~y?LMUs zGOi@ZFPMRmTR>hxrLtrC<(t3GybI`HU|{&=>Eak-(R+6CM&3gP0t~sD3#RB@N@3#i z67w)iU`boxeu_!Y$ib|kZ651{6&o4fH`&+yek&ke^7GNxQ!oF_pMLg6(Bj6BUAvk? z6jmsBhHHE1GUZLZwBuI9Qh^?kmyJq{Q!Z5`SP89B;?xjYz|45r)!~@KQl>_aiJAeO z0*wn!Xnr`A$Ft4ye*eC{FwA>M43f1K z-U%|UB*-tAfstE4UO}a@WBTQrzs|f1=wM)A_~q&17-G?TcJfBvLk0p2xta^6=v_)- z;_?#nFiT)bTi||*Nzcf^tf6fl>x2~>8Q(YA*ZqDgAYStG(brQi|ID9$_D0a+#*kgR znnM&;D0qfzd+0LdO}(_^R>V?)9+8)gN{mx3RU}vmtx@9C5L&>@c-htAn8Q-0MvsY_ z0i6Pk3r=W$IF-k<&GLT#zP{vI<7c%A`!}{auQPtY^1zZ=k0H+Z0po+u{3qn5=FXEf z|J|IY>dCXiMX#V!%F*_2UVj6>=7pxCT#Wh)gcvyeI2%}wg)uYk?RSV4exdyiRl4_pV(!I{W5r-BIn6JUJN@n4YeFF6*2UngG~R Bl@I^` literal 0 HcmV?d00001 diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp index e7b091504ff..30be47d2dca 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp @@ -185,6 +185,14 @@ QVector4D GeneralHelper::fitObjectToCamera(QQuick3DCamera *camera, float default zoomCamera(camera, 0, defaultLookAtDistance, lookAt, newZoomFactor, false)); } +void GeneralHelper::delayedPropertySet(QObject *obj, int delay, const QString &property, + const QVariant &value) +{ + QTimer::singleShot(delay, [obj, property, value]() { + obj->setProperty(property.toLatin1().constData(), value); + }); +} + } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h index f667a974423..8a1cbe7001d 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h @@ -57,6 +57,8 @@ public: float zoomFactor, bool relative); Q_INVOKABLE QVector4D fitObjectToCamera(QQuick3DCamera *camera, float defaultLookAtDistance, QQuick3DNode *targetObject, QQuick3DViewport *viewPort); + Q_INVOKABLE void delayedPropertySet(QObject *obj, int delay, const QString &property, + const QVariant& value); signals: void overlayUpdateNeeded(); diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc index c82164c1ff9..fcb510ccf08 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc @@ -64,5 +64,9 @@ mockfiles/images/point_light_gradient@2x.png mockfiles/images/area_light_gradient.png mockfiles/images/area_light_gradient@2x.png + mockfiles/images/fit_active.png + mockfiles/images/fit_active@2x.png + mockfiles/images/fit_selected.png + mockfiles/images/fit_selected@2x.png