Skip to content

Commit

Permalink
Now using application/x-mitk-datanodes with lists of size 1
Browse files Browse the repository at this point in the history
  • Loading branch information
MattClarkson committed Nov 19, 2011
1 parent 4127cb2 commit 88c5158
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 95 deletions.
86 changes: 49 additions & 37 deletions CoreUI/Qmitk/QmitkDataStorageTreeModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,19 @@ Qt::DropActions QmitkDataStorageTreeModel::supportedDragActions() const
bool QmitkDataStorageTreeModel::dropMimeData(const QMimeData *data,
Qt::DropAction action, int /*row*/, int /*column*/, const QModelIndex &parent)
{
// Early exit, returning true, but not actually doing anything (ignoring data).
if (action == Qt::IgnoreAction)
{
return true;
}

// Note, we are returning true if we handled it, and false otherwise
bool returnValue = false;

if(data->hasFormat("application/x-qabstractitemmodeldatalist"))
{
returnValue = true;

QString arg = QString(data->data("application/x-qabstractitemmodeldatalist").data());
QStringList listOfTreeItemAddressPointers = arg.split(",");

Expand Down Expand Up @@ -215,38 +223,42 @@ bool QmitkDataStorageTreeModel::dropMimeData(const QMimeData *data,
}
else if(data->hasFormat("application/x-mitk-datanodes"))
{
QString arg = QString(data->data("application/x-mitk-datanodes").data());
QStringList listOfDataNodeAddressPointers = arg.split(",");
int numberOfNodesDropped = 0;

QStringList::iterator slIter;
for (slIter = listOfDataNodeAddressPointers.begin();
slIter != listOfDataNodeAddressPointers.end();
slIter++)
{
long val = (*slIter).toLong();
mitk::DataNode* node = static_cast<mitk::DataNode *>((void*)val);

if(node && m_DataStorage.IsNotNull() && !m_DataStorage->Exists(node))
{
m_DataStorage->Add( node );
mitk::BaseData::Pointer basedata = node->GetData();

if (basedata.IsNotNull())
{
mitk::RenderingManager::GetInstance()->InitializeViews(
basedata->GetTimeSlicedGeometry(), mitk::RenderingManager::REQUEST_UPDATE_ALL, true );

numberOfNodesDropped++;
}
}
}
if (numberOfNodesDropped > 0)
returnValue = true;

QString arg = QString(data->data("application/x-mitk-datanodes").data());
QStringList listOfDataNodeAddressPointers = arg.split(",");
int numberOfNodesDropped = 0;

QStringList::iterator slIter;
for (slIter = listOfDataNodeAddressPointers.begin();
slIter != listOfDataNodeAddressPointers.end();
slIter++)
{
long val = (*slIter).toLong();
mitk::DataNode* node = static_cast<mitk::DataNode *>((void*)val);

if(node && m_DataStorage.IsNotNull() && !m_DataStorage->Exists(node))
{
mitk::RenderingManager::GetInstance()->RequestUpdateAll();
m_DataStorage->Add( node );
mitk::BaseData::Pointer basedata = node->GetData();

if (basedata.IsNotNull())
{
mitk::RenderingManager::GetInstance()->InitializeViews(
basedata->GetTimeSlicedGeometry(), mitk::RenderingManager::REQUEST_UPDATE_ALL, true );

numberOfNodesDropped++;
}
}
}
// Only do a rendering update, if we actually dropped anything.
if (numberOfNodesDropped > 0)
{
mitk::RenderingManager::GetInstance()->RequestUpdateAll();
}
}
return false;

return returnValue;
}

QStringList QmitkDataStorageTreeModel::mimeTypes() const
Expand All @@ -261,26 +273,26 @@ QMimeData * QmitkDataStorageTreeModel::mimeData(const QModelIndexList & indexes)

QMimeData * ret = new QMimeData;

QString listOfTreeItemAddresses("");
QString listOfDataNodeAddresses("");
QString treeItemAddresses("");
QString dataNodeAddresses("");

for (int i = 0; i < indexes.size(); i++)
{
TreeItem* treeItem = static_cast<TreeItem*>(indexes.at(i).internalPointer());
long treeItemAddress = reinterpret_cast<long>(treeItem);
long dataNodeAddress = reinterpret_cast<long>(treeItem->GetDataNode().GetPointer());
QTextStream(&listOfTreeItemAddresses) << treeItemAddress;
QTextStream(&listOfDataNodeAddresses) << dataNodeAddress;
QTextStream(&treeItemAddresses) << treeItemAddress;
QTextStream(&dataNodeAddresses) << dataNodeAddress;

if (i != indexes.size() - 1)
{
QTextStream(&listOfTreeItemAddresses) << ",";
QTextStream(&listOfDataNodeAddresses) << ",";
QTextStream(&treeItemAddresses) << ",";
QTextStream(&dataNodeAddresses) << ",";
}
}

ret->setData("application/x-qabstractitemmodeldatalist", QByteArray(listOfTreeItemAddresses.toAscii()));
ret->setData("application/x-mitk-datanodes", QByteArray(listOfDataNodeAddresses.toAscii()));
ret->setData("application/x-qabstractitemmodeldatalist", QByteArray(treeItemAddresses.toAscii()));
ret->setData("application/x-mitk-datanodes", QByteArray(dataNodeAddresses.toAscii()));

return ret;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,39 +39,55 @@ QmitkPythonVariableStackTreeWidget::~QmitkPythonVariableStackTreeWidget()

bool QmitkPythonVariableStackTreeWidget::dropMimeData ( const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent )
{
// Early exit, returning true, but not actually doing anything (ignoring data).
if (action == Qt::IgnoreAction)
return true;

if(data->hasFormat("application/x-mitk-datanode"))
// Note, we are returning true if we handled it, and false otherwise
bool returnValue = false;

if(data->hasFormat("application/x-mitk-datanodes"))
{
QString arg = QString(data->data("application/x-mitk-datanode").data());
long val = arg.toLong();
mitk::DataNode* node = static_cast<mitk::DataNode *>((void*)val);
itk::SmartPointer<mitk::DataNode > * resultptr;
resultptr = new itk::SmartPointer<mitk::DataNode >((itk::SmartPointer<mitk::DataNode > &)node);
returnValue = true;

QString arg = QString(data->data("application/x-mitk-datanodes").data());
QStringList listOfDataNodeAddressPointers = arg.split(",");

if(resultptr)
QStringList::iterator slIter;
for (slIter = listOfDataNodeAddressPointers.begin();
slIter != listOfDataNodeAddressPointers.end();
slIter++)
{
int i = 0;
while(swig_types_initial[i] != 0)
{
if(swig_types_initial[i] == _swigt__p_itk__SmartPointerTmitk__DataNode_t)
SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t = SWIG_TypeRegister(swig_types_initial[i]);
i++;
}

PyObject * resultObj = SWIG_NewPointerObj((void*)(resultptr), SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t, 1);
PyObject* dict = PyImport_GetModuleDict();
PyObject* object = PyDict_GetItemString(dict, "__main__");

if(object){
Py_INCREF(object);
PyModule_AddObject(object, node->GetName().c_str(), resultObj);
}
setVariableStack(QmitkPythonMediator::getAttributeList());
long val = (*slIter).toLong();
mitk::DataNode* node = static_cast<mitk::DataNode *>((void*)val);

itk::SmartPointer<mitk::DataNode > * resultptr;
resultptr = new itk::SmartPointer<mitk::DataNode >((itk::SmartPointer<mitk::DataNode > &)node);

if(resultptr)
{
int i = 0;
while(swig_types_initial[i] != 0)
{
if(swig_types_initial[i] == _swigt__p_itk__SmartPointerTmitk__DataNode_t)
SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t = SWIG_TypeRegister(swig_types_initial[i]);
i++;
}

PyObject * resultObj = SWIG_NewPointerObj((void*)(resultptr), SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t, 1);
PyObject* dict = PyImport_GetModuleDict();
PyObject* object = PyDict_GetItemString(dict, "__main__");

if(object){
Py_INCREF(object);
PyModule_AddObject(object, node->GetName().c_str(), resultObj);
}
setVariableStack(QmitkPythonMediator::getAttributeList());
}
}

}
return false;
return returnValue;
}

QVariant QmitkPythonVariableStackTreeWidget::headerData(int section, Qt::Orientation orientation,
Expand Down Expand Up @@ -156,50 +172,61 @@ QMimeData * QmitkPythonVariableStackTreeWidget::mimeData(const QModelIndexList &
{

QMimeData * ret = new QMimeData;
QString name = m_variableStack[indexes.at(0).row()][0];
QString type = m_variableStack[indexes.at(0).row()][2];

if(type != "DataNode_PointerPtr")
return NULL;
QString dataNodeAddresses("");

mitk::DataNode* node;
itk::SmartPointer<mitk::DataNode> *arg;

PyObject * obj = QmitkPythonMediator::getPyObjectString(&name);
int i = 0;
while(swig_types_initial[i] != 0)
for (int indexesCounter = 0; indexesCounter < indexes.size(); indexesCounter++)
{
if(swig_types_initial[i] == _swigt__p_itk__SmartPointerTmitk__DataNode_t)
SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t = SWIG_TypeRegister(swig_types_initial[i]);
i++;
}
if ((SWIG_ConvertPtr(obj,(void **)(&arg),SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t,
SWIG_POINTER_EXCEPTION | 0)) == -1) return NULL;

if(arg == NULL){
return NULL;
QString name = m_variableStack[indexes.at(indexesCounter).row()][0];
QString type = m_variableStack[indexes.at(indexesCounter).row()][2];

if(type != "DataNode_PointerPtr")
return NULL;

mitk::DataNode* node;
itk::SmartPointer<mitk::DataNode> *arg;

PyObject * obj = QmitkPythonMediator::getPyObjectString(&name);
int i = 0;
while(swig_types_initial[i] != 0)
{
if(swig_types_initial[i] == _swigt__p_itk__SmartPointerTmitk__DataNode_t)
SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t = SWIG_TypeRegister(swig_types_initial[i]);
i++;
}
if ((SWIG_ConvertPtr(obj,(void **)(&arg),SWIGTYPE_p_itk__SmartPointerTmitk__DataNode_t,
SWIG_POINTER_EXCEPTION | 0)) == -1) return NULL;

if(arg == NULL){
return NULL;
}
try {
node = (mitk::DataNode *)((itk::SmartPointer<mitk::DataNode > const *)arg)->GetPointer();
}
catch(std::exception &_e) {
{
std::cout << "Not a DataNode" << std::endl;
}
}

long a = reinterpret_cast<long>(node);

if (dataNodeAddresses.size() != 0)
{
QTextStream(&dataNodeAddresses) << ",";
}
QTextStream(&dataNodeAddresses) << a;

ret->setData("application/x-mitk-datanodes", QByteArray(dataNodeAddresses.toAscii()));
}
try {
node = (mitk::DataNode *)((itk::SmartPointer<mitk::DataNode > const *)arg)->GetPointer();
}
catch(std::exception &_e) {
{
std::cout << "Not a DataNode" << std::endl;
}
}

long a = reinterpret_cast<long>(node);

QString resultString;
QTextStream(&resultString) << a;
ret->setData("application/x-mitk-datanode", QByteArray(resultString.toAscii()));
return ret;
}

QStringList QmitkPythonVariableStackTreeWidget::mimeTypes() const
{
QStringList types;
types << "application/x-mitk-datanode";
types << "application/x-mitk-datanodes";
types << "application/x-qabstractitemmodeldatalist";
return types;
}
Expand Down

0 comments on commit 88c5158

Please sign in to comment.