From 43eff4eb9ace70446b0d8fdd4475bdcfeb811fc3 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Tue, 8 Jun 2010 15:24:07 +0000 Subject: [PATCH] SceneWin, added drag support for entities to support dropping on the python shell git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2363 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/gui/src/scene_win/gfx_scene_node.cc | 4 +-- modules/gui/src/scene_win/scene_win.cc | 1 + modules/gui/src/scene_win/scene_win_model.cc | 30 ++++++++++++++++++++ modules/gui/src/scene_win/scene_win_model.hh | 6 ++++ 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/modules/gui/src/scene_win/gfx_scene_node.cc b/modules/gui/src/scene_win/gfx_scene_node.cc index 9b8828779..f8632e901 100644 --- a/modules/gui/src/scene_win/gfx_scene_node.cc +++ b/modules/gui/src/scene_win/gfx_scene_node.cc @@ -71,10 +71,10 @@ bool GfxSceneNode::SetData(int column, const QVariant& value, int role){ Qt::ItemFlags GfxSceneNode::Flags(int column) const{ if(column==0){ - return Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled; + return Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsDragEnabled; } else if(column==1){ - return Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable; + return Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable|Qt::ItemIsDragEnabled; } return Qt::NoItemFlags; } diff --git a/modules/gui/src/scene_win/scene_win.cc b/modules/gui/src/scene_win/scene_win.cc index 0d492d3bc..0b2e75bd3 100644 --- a/modules/gui/src/scene_win/scene_win.cc +++ b/modules/gui/src/scene_win/scene_win.cc @@ -59,6 +59,7 @@ SceneWin::SceneWin(QWidget* parent) : view_->setSelectionBehavior(QAbstractItemView::SelectRows); view_->setSelectionMode(QAbstractItemView::ExtendedSelection); view_->setEditTriggers(QAbstractItemView::EditKeyPressed); + view_->setDragEnabled(true); view_->expandAll(); layout->addWidget(view_); diff --git a/modules/gui/src/scene_win/scene_win_model.cc b/modules/gui/src/scene_win/scene_win_model.cc index 12df1534d..9e7542b08 100644 --- a/modules/gui/src/scene_win/scene_win_model.cc +++ b/modules/gui/src/scene_win/scene_win_model.cc @@ -198,6 +198,36 @@ bool SceneWinModel::setData(const QModelIndex& index, return false; } +QStringList SceneWinModel::mimeTypes() const +{ + QStringList types; + types << "text/plain"; + return types; +} + +Qt::DropActions SceneWinModel::supportedDragActions() const +{ + return Qt::MoveAction; +} + +QMimeData* SceneWinModel::mimeData(const QModelIndexList &indexes) const +{ + QMimeData *mimeData = new QMimeData(); + QByteArray encoded_data; + + QDataStream stream(&encoded_data, QIODevice::WriteOnly); + + + foreach (QModelIndex index, indexes) { + if (index.isValid() && index.column()==1) { + QString text = "scene['"+data(index, Qt::DisplayRole).toString()+"']"; + encoded_data.append(text); + } + } + mimeData->setData("text/plain", encoded_data); + return mimeData; +} + void SceneWinModel::NodeAdded(const gfx::GfxNodeP& node) { gfx::EntityP e=boost::dynamic_pointer_cast<gfx::Entity>(node); diff --git a/modules/gui/src/scene_win/scene_win_model.hh b/modules/gui/src/scene_win/scene_win_model.hh index 996f7b640..c65af6677 100644 --- a/modules/gui/src/scene_win/scene_win_model.hh +++ b/modules/gui/src/scene_win/scene_win_model.hh @@ -23,6 +23,8 @@ Author: Stefan Scheuber, Marco Biasini, Ansgar Philippsen */ +#include <QStringList> +#include <QMimeData> #include <QMap> #include <QAbstractItemModel> @@ -88,6 +90,10 @@ public: const QVariant& value=QVariant(), int role=Qt::DisplayRole); + virtual QStringList mimeTypes() const; + Qt::DropActions supportedDragActions() const; + virtual QMimeData* mimeData(const QModelIndexList& indexes) const; + // scene observer interface virtual void NodeAdded(const gfx::GfxNodeP& node); virtual void NodeRemoved(const gfx::GfxNodeP& node); -- GitLab