diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2022-08-23 15:19:56 +0300 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2022-08-25 09:55:32 +0000 |
commit | 8656bafbd4051bb75fea398f68331c73d9d67cfb (patch) | |
tree | 329a67afe38e1a1baf40f92ed946b26999b5b465 /share/qtcreator/qml/qmlpuppet | |
parent | f6e8b5f753e05f210979987dc3e9092cefb8b958 (diff) |
QmlDesigner: Add delete action to 3D Editor's context menu
This entails selecting a model upon right-clicking if it is not selected.
Also fixed a memory leak and small tweaks.
Fixes: QDS-7401
Change-Id: I592acb3fff30ecc3236f3cf2fbe126de4fb389dc
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet')
3 files changed, 39 insertions, 24 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml index 1376610984..3409003189 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml @@ -363,7 +363,7 @@ Item { } } - function handleObjectClicked(object, multi) + function handleObjectClicked(object, button, multi) { if (object instanceof View3D) { // View3D can be the resolved pick target in case the 3D editor is showing content @@ -393,7 +393,14 @@ Item { // Null object always clears entire selection var newSelection = []; if (clickedObject) { - if (multi && selectedNodes.length > 0) { + if (button === Qt.RightButton) { + // Right-clicking does only single selection (when clickedObject is unselected) + // This is needed for selecting a target for the context menu + if (!selectedNodes.includes(clickedObject)) + newSelection[0] = clickedObject; + else + newSelection = selectedNodes; + } else if (multi && selectedNodes.length > 0) { var deselect = false; for (var i = 0; i < selectedNodes.length; ++i) { // Multiselecting already selected object clears that object from selection @@ -697,10 +704,10 @@ Item { view3D: overlayView dragHelper: gizmoDragHelper - onPropertyValueCommit: (propName)=> { + onPropertyValueCommit: (propName) => { viewRoot.commitObjectProperty([targetNode], [propName]); } - onPropertyValueChange: (propName)=> { + onPropertyValueChange: (propName) => { viewRoot.changeObjectProperty([targetNode], [propName]); } } @@ -772,17 +779,17 @@ Item { MouseArea { anchors.fill: parent - acceptedButtons: Qt.LeftButton + acceptedButtons: Qt.LeftButton | Qt.RightButton hoverEnabled: false property MouseArea3D freeDraggerArea property point pressPoint property bool initialMoveBlock: false - onPressed: (mouse)=> { + onPressed: (mouse) => { if (viewRoot.editView) { var pickResult = viewRoot.editView.pick(mouse.x, mouse.y); - handleObjectClicked(_generalHelper.resolvePick(pickResult.objectHit), + handleObjectClicked(_generalHelper.resolvePick(pickResult.objectHit), mouse.button, mouse.modifiers & Qt.ControlModifier); if (pickResult.objectHit && pickResult.objectHit instanceof Node) { @@ -800,7 +807,7 @@ Item { } } } - onPositionChanged: (mouse)=> { + onPositionChanged: (mouse) => { 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 @@ -825,10 +832,10 @@ Item { } } - onReleased: (mouse)=> { + onReleased: (mouse) => { handleRelease(mouse); } - onCanceled: (mouse)=> { + onCanceled: (mouse) => { handleRelease(mouse); } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml index 721e74ac30..5fa269a916 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml @@ -363,7 +363,7 @@ Item { } } - function handleObjectClicked(object, multi) + function handleObjectClicked(object, button, multi) { if (object instanceof View3D) { // View3D can be the resolved pick target in case the 3D editor is showing content @@ -393,7 +393,14 @@ Item { // Null object always clears entire selection var newSelection = []; if (clickedObject) { - if (multi && selectedNodes.length > 0) { + if (button === Qt.RightButton) { + // Right-clicking does only single selection (when clickedObject is unselected) + // This is needed for selecting a target for the context menu + if (!selectedNodes.includes(clickedObject)) + newSelection[0] = clickedObject; + else + newSelection = selectedNodes; + } else if (multi && selectedNodes.length > 0) { var deselect = false; for (var i = 0; i < selectedNodes.length; ++i) { // Multiselecting already selected object clears that object from selection @@ -841,10 +848,10 @@ Item { view3D: overlayView dragHelper: gizmoDragHelper - onPropertyValueCommit: (propName)=> { + onPropertyValueCommit: (propName) => { viewRoot.commitObjectProperty([targetNode], [propName]); } - onPropertyValueChange: (propName)=> { + onPropertyValueChange: (propName) => { viewRoot.changeObjectProperty([targetNode], [propName]); } } @@ -917,14 +924,14 @@ Item { MouseArea { anchors.fill: parent - acceptedButtons: Qt.LeftButton + acceptedButtons: Qt.LeftButton | Qt.RightButton hoverEnabled: false property MouseArea3D freeDraggerArea property point pressPoint property bool initialMoveBlock: false - onPressed: (mouse)=> { + onPressed: (mouse) => { if (viewRoot.editView) { // First pick overlay to check for hits there var pickResult = _generalHelper.pickViewAt(overlayView, mouse.x, mouse.y); @@ -935,7 +942,7 @@ Item { resolvedResult = _generalHelper.resolvePick(pickResult.objectHit); } - handleObjectClicked(resolvedResult, mouse.modifiers & Qt.ControlModifier); + handleObjectClicked(resolvedResult, mouse.button, mouse.modifiers & Qt.ControlModifier); if (pickResult.objectHit && pickResult.objectHit instanceof Node) { if (transformMode === EditView3D.TransformMode.Move) @@ -952,7 +959,7 @@ Item { } } } - onPositionChanged: (mouse)=> { + onPositionChanged: (mouse) => { 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 @@ -977,10 +984,10 @@ Item { } } - onReleased: (mouse)=> { + onReleased: (mouse) => { handleRelease(mouse); } - onCanceled: (mouse)=> { + onCanceled: (mouse) => { handleRelease(mouse); } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index b94fa31fc6..852572ebf1 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -285,12 +285,12 @@ void Qt5InformationNodeInstanceServer::handleInputEvents() continue; } } - auto me = new QMouseEvent(command.type(), command.pos(), command.button(), - command.buttons(), command.modifiers()); + QMouseEvent me(command.type(), command.pos(), command.button(), command.buttons(), + command.modifiers()); // We must use sendEvent in Qt 6, as using postEvent allows the associated position // data stored internally in QMutableEventPoint to potentially be updated by system // before the event is delivered. - QGuiApplication::sendEvent(m_editView3DData.window, me); + QGuiApplication::sendEvent(m_editView3DData.window, &me); // Context menu requested if (command.button() == Qt::RightButton && command.modifiers() == Qt::NoModifier) @@ -428,7 +428,8 @@ void Qt5InformationNodeInstanceServer::getModelAtPos(const QPointF &pos) QVariant instance = resolvedPick ? instanceForObject(resolvedPick).instanceId() : -1; nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::ModelAtPos, instance}); - return; +#else + Q_UNUSED(pos) #endif } |