(#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.
This commit is contained in:
Pål Hagen 2015-10-22 14:42:05 +02:00
parent 52f1e47576
commit 1b83bfb7f0
4 changed files with 28 additions and 0 deletions

View File

@ -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() { }

View File

@ -87,6 +87,16 @@ public:
virtual ~PdmUiTreeViewWidget() {};
protected:
virtual void dragMoveEvent(QDragMoveEvent* event)
{
caf::PdmUiTreeViewModel* treeViewModel = dynamic_cast<caf::PdmUiTreeViewModel*>(model());
if (treeViewModel)
{
treeViewModel->updateDragDropHandleFromEvent(event);
}
QTreeView::dragMoveEvent(event);
}
virtual void dragLeaveEvent(QDragLeaveEvent* event)
{
caf::PdmUiTreeViewModel* treeViewModel = dynamic_cast<caf::PdmUiTreeViewModel*>(model());
@ -94,6 +104,8 @@ protected:
{
treeViewModel->endDrag();
}
QTreeView::dragLeaveEvent(event);
}
};

View File

@ -45,6 +45,7 @@
#include "cafPdmUiTreeViewEditor.h"
#include <QTreeView>
#include <QDragMoveEvent>
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());
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -41,6 +41,8 @@
#include <QAbstractItemModel>
#include <QStringList>
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: