00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2009-07-14 19:11:20 +0200 (Tue, 14 Jul 2009) $ 00006 Version: $Revision: 18127 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #include <QmitkDnDFrameWidget.h> 00019 #include <QtGui> 00020 00021 00022 // berry Includes 00023 #include <berryPlatform.h> 00024 00025 #include <mitkDataNodeFactory.h> 00026 #include "mitkIDataStorageService.h" 00027 #include "mitkDataStorageEditorInput.h" 00028 #include "mitkRenderingManager.h" 00029 00030 #include "mitkProperties.h" 00031 #include "mitkNodePredicateData.h" 00032 #include "mitkNodePredicateNot.h" 00033 #include "mitkNodePredicateProperty.h" 00034 00035 #include "mitkProgressBar.h" 00036 00037 QmitkDnDFrameWidget::QmitkDnDFrameWidget(QWidget *parent) 00038 : QWidget(parent) 00039 { 00040 setAcceptDrops(true); 00041 } 00042 00043 void QmitkDnDFrameWidget::dragEnterEvent( QDragEnterEvent *event ) 00044 { // accept drags 00045 event->accept(); 00046 } 00047 void QmitkDnDFrameWidget::dropEvent( QDropEvent * event ) 00048 { //open dragged files 00049 00050 mitk::IDataStorageService::Pointer service = 00051 berry::Platform::GetServiceRegistry().GetServiceById<mitk::IDataStorageService>(mitk::IDataStorageService::ID); 00052 00053 mitk::DataStorage::Pointer ds; 00054 if (service.IsNotNull()) 00055 ds = service->GetActiveDataStorage()->GetDataStorage(); 00056 else 00057 return; 00058 00059 QList<QUrl> fileNames = event->mimeData()->urls(); 00060 00061 bool dsmodified = false; 00062 for (QList<QUrl>::Iterator fileName = fileNames.begin(); 00063 fileName != fileNames.end(); ++fileName) 00064 { 00065 00066 mitk::DataNodeFactory::Pointer nodeReader = mitk::DataNodeFactory::New(); 00067 try 00068 { 00069 nodeReader->SetFileName(fileName->toLocalFile().toLatin1().data()); 00070 nodeReader->Update(); 00071 for ( unsigned int i = 0 ; i < nodeReader->GetNumberOfOutputs( ); ++i ) 00072 { 00073 mitk::DataNode::Pointer node; 00074 node = nodeReader->GetOutput(i); 00075 if ( node->GetData() != NULL ) 00076 { 00077 ds->Add(node); 00078 dsmodified = true; 00079 } 00080 } 00081 } 00082 catch(...) 00083 { 00084 00085 } 00086 00087 } 00088 00089 if(dsmodified) 00090 { 00091 // get all nodes that have not set "includeInBoundingBox" to false 00092 mitk::NodePredicateNot::Pointer pred 00093 = mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("includeInBoundingBox" 00094 , mitk::BoolProperty::New(false))); 00095 00096 mitk::DataStorage::SetOfObjects::ConstPointer rs = ds->GetSubset(pred); 00097 // calculate bounding geometry of these nodes 00098 mitk::TimeSlicedGeometry::Pointer bounds = ds->ComputeBoundingGeometry3D(rs); 00099 // initialize the views to the bounding geometry 00100 mitk::RenderingManager::GetInstance()->InitializeViews(bounds); 00101 } 00102 }