From dd2888f303856b4156f406ea0654140b3be3d6c4 Mon Sep 17 00:00:00 2001 From: cneben Date: Tue, 20 Feb 2024 16:14:49 +0100 Subject: [PATCH] #223 Again again again. See what it broke ;) Signed-off-by: cneben --- src/qanDraggableCtrl.cpp | 7 +++++-- src/qanEdgeDraggableCtrl.cpp | 17 ++++++++++++++--- src/qanGraph.cpp | 8 ++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/qanDraggableCtrl.cpp b/src/qanDraggableCtrl.cpp index 073efb4e..c49b63a7 100644 --- a/src/qanDraggableCtrl.cpp +++ b/src/qanDraggableCtrl.cpp @@ -159,6 +159,8 @@ void DraggableCtrl::handleMouseReleaseEvent(QMouseEvent* event) void DraggableCtrl::beginDragMove(const QPointF& sceneDragPos, bool dragSelection, bool notify) { + qWarning() << "DraggableCtrl::beginDragMove(): target=" << getTargetItem() << " dragSelection=" << dragSelection << " notify=" << notify; + if (_targetItem == nullptr || _target == nullptr) return; @@ -198,9 +200,9 @@ void DraggableCtrl::beginDragMove(const QPointF& sceneDragPos, bool dragSelec _initialTargetScenePos = rootItem->mapFromItem(_targetItem, QPointF{0,0}); // If there is a selection, keep start position for all selected nodes. + qWarning() << "graph->hasMultipleSelection(): " << graph->hasMultipleSelection(); if (dragSelection && graph->hasMultipleSelection()) { - auto beginDragMoveSelected = [this, &sceneDragPos] (auto primitive) { // Call beginDragMove() on a given node or group if (primitive != nullptr && primitive->getItem() != nullptr && @@ -225,6 +227,7 @@ void DraggableCtrl::dragMove(const QPointF& sceneDragPos, bool dragSelection, // _graph must be configured (non nullptr) // _graph must have a container item for coordinate mapping // _target and _targetItem must be configured (true) + qWarning() << "DraggableCtrl::dragMove(): target=" << getTargetItem() << " dragSelection=" << dragSelection; if (!_target || !_targetItem) @@ -338,7 +341,7 @@ void DraggableCtrl::dragMove(const QPointF& sceneDragPos, bool dragSelection, if (primitive != nullptr && primitive->getItem() != nullptr && primitiveIsNotSelf) // Note: nodes inside a group or groups might be dragged too - primitive->getItem()->draggableCtrl().dragMove(sceneDragPos, false); + primitive->getItem()->draggableCtrl().dragMove(sceneDragPos, /*dragSelection=*/false); }; std::for_each(graph->getSelectedNodes().begin(), graph->getSelectedNodes().end(), dragMoveSelected); diff --git a/src/qanEdgeDraggableCtrl.cpp b/src/qanEdgeDraggableCtrl.cpp index 22c203e5..ce98bd80 100644 --- a/src/qanEdgeDraggableCtrl.cpp +++ b/src/qanEdgeDraggableCtrl.cpp @@ -114,6 +114,11 @@ void EdgeDraggableCtrl::beginDragMove(const QPointF& sceneDragPos, bool dragS Q_UNUSED(notify) if (!_targetItem) return; + // FIXME #223 + /*if (_target->getIsProtected() || // Prevent dragging of protected or locked objects + _target->getLocked()) + return;*/ + qWarning() << "EdgeDraggableCtrl::beginDragMove(): target=" << getTargetItem() << " dragSelection=" << dragSelection << " notify=" << notify; _targetItem->setDragged(true); _initialDragPos = sceneDragPos; @@ -157,6 +162,7 @@ void EdgeDraggableCtrl::beginDragMove(const QPointF& sceneDragPos, bool dragS void EdgeDraggableCtrl::dragMove(const QPointF& sceneDragPos, bool dragSelection, bool disableSnapToGrid, bool disableOrientation) { + qWarning() << "EdgeDraggableCtrl::dragMove(): target=" << getTargetItem() << " dragSelection=" << dragSelection; Q_UNUSED(dragSelection) Q_UNUSED(disableSnapToGrid) Q_UNUSED(disableOrientation) @@ -201,19 +207,24 @@ void EdgeDraggableCtrl::dragMove(const QPointF& sceneDragPos, bool dragSelect const auto graph = getGraph(); if (graph == nullptr) return; + qWarning() << "selected nodes="; + for (const auto& sn: graph->getSelectedNodes()) + qWarning() << " " << sn; + qWarning() << "selected edges="; + for (const auto& se: graph->getSelectedEdges()) + qWarning() << " " << se; if (dragSelection) { - auto dragMoveSelected = [this, &sceneDragPos] (auto primitive) { // Call dragMove() on a given node or group + auto dragMoveSelected = [this, &sceneDragPos] (auto primitive) { // Call dragMove() on a given node, group or edge const auto primitiveIsNotSelf = static_cast(primitive->getItem()) != static_cast(this->_targetItem.data()); if (primitive != nullptr && primitive->getItem() != nullptr && primitiveIsNotSelf) // Note: nodes inside a group or groups might be dragged too - primitive->getItem()->draggableCtrl().dragMove(sceneDragPos, false); + primitive->getItem()->draggableCtrl().dragMove(sceneDragPos, /*dragSelection=*/false); }; std::for_each(graph->getSelectedNodes().begin(), graph->getSelectedNodes().end(), dragMoveSelected); std::for_each(graph->getSelectedEdges().begin(), graph->getSelectedEdges().end(), dragMoveSelected); std::for_each(graph->getSelectedGroups().begin(), graph->getSelectedGroups().end(), dragMoveSelected); - //std::for_each(graph->getSelectedEdges().begin(), graph->getSelectedEdges().end(), dragMoveSelected); } } diff --git a/src/qanGraph.cpp b/src/qanGraph.cpp index 4034dcc4..3358bc7a 100644 --- a/src/qanGraph.cpp +++ b/src/qanGraph.cpp @@ -1438,9 +1438,13 @@ bool Graph::hasMultipleSelection() const { // Note 20231104: There is still no support for multiple edge selection, // but an heterogeneous selection of nodes and groups is a multiple selection - return (_selectedNodes.size() + + // FIXME #223 again + /*return (_selectedNodes.size() + _selectedGroups.size()) > 1 || - _selectedEdges.size() > 1; + _selectedEdges.size() > 1;*/ + return (_selectedNodes.size() + + _selectedGroups.size() + + _selectedEdges.size()) > 1; } std::vector Graph::getSelectedItems() const