From 1b83bfb7f0b011ac8adefb3307625928436e74d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Hagen?= Date: Thu, 22 Oct 2015 14:42:05 +0200 Subject: [PATCH] (#467) Handling drag move events to get the proposed drop action The tree view model's drag & drop handle is notified about the proposed action in drag move events. --- Fwk/AppFwk/cafUserInterface/cafPdmUiDragDropHandle.h | 1 + Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h | 12 ++++++++++++ .../cafUserInterface/cafPdmUiTreeViewModel.cpp | 12 ++++++++++++ Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.h | 3 +++ 4 files changed, 28 insertions(+) diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiDragDropHandle.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiDragDropHandle.h index ba8cfcb4a4..4d298b61e4 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiDragDropHandle.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiDragDropHandle.h @@ -58,6 +58,7 @@ public: virtual QMimeData* mimeData(const QModelIndexList &indexes) const = 0; virtual QStringList mimeTypes() const = 0; virtual void endDrag() = 0; + virtual void setProposedAction(Qt::DropAction action) = 0; }; inline PdmUiDragDropHandle::~PdmUiDragDropHandle() { } diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h index a3e1f2a6eb..c76a2e7d6c 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h @@ -87,6 +87,16 @@ public: virtual ~PdmUiTreeViewWidget() {}; protected: + virtual void dragMoveEvent(QDragMoveEvent* event) + { + caf::PdmUiTreeViewModel* treeViewModel = dynamic_cast(model()); + if (treeViewModel) + { + treeViewModel->updateDragDropHandleFromEvent(event); + } + + QTreeView::dragMoveEvent(event); + } virtual void dragLeaveEvent(QDragLeaveEvent* event) { caf::PdmUiTreeViewModel* treeViewModel = dynamic_cast(model()); @@ -94,6 +104,8 @@ protected: { treeViewModel->endDrag(); } + + QTreeView::dragLeaveEvent(event); } }; diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.cpp index 478bc2aaab..0b570d2310 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.cpp @@ -45,6 +45,7 @@ #include "cafPdmUiTreeViewEditor.h" #include +#include namespace caf { @@ -794,6 +795,17 @@ void PdmUiTreeViewModel::setDragDropHandle(PdmUiDragDropHandle* dragDropHandle) m_dragDropHandle = dragDropHandle; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiTreeViewModel::updateDragDropHandleFromEvent(const QDragMoveEvent* event) +{ + if (m_dragDropHandle && event) + { + m_dragDropHandle->setProposedAction(event->proposedAction()); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.h index a5d5ee9ec8..184535471d 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewModel.h @@ -41,6 +41,8 @@ #include #include +class QDragMoveEvent; + namespace caf { @@ -74,6 +76,7 @@ public: QModelIndex findModelIndex(const PdmUiItem* object) const; void setDragDropHandle(PdmUiDragDropHandle* dragDropHandle); + void updateDragDropHandleFromEvent(const QDragMoveEvent* event); void endDrag(); private: