aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/qml/qmlpuppet
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2022-08-23 15:19:56 +0300
committerMahmoud Badri <mahmoud.badri@qt.io>2022-08-25 09:55:32 +0000
commit8656bafbd4051bb75fea398f68331c73d9d67cfb (patch)
tree329a67afe38e1a1baf40f92ed946b26999b5b465 /share/qtcreator/qml/qmlpuppet
parentf6e8b5f753e05f210979987dc3e9092cefb8b958 (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')
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml27
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml27
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp9
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
}