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 <QmitkExtDnDFrameWidget.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 00036 #include "mitkSceneIO.h" 00037 #include "mitkProgressBar.h" 00038 00039 QmitkExtDnDFrameWidget::QmitkExtDnDFrameWidget(QWidget *parent) 00040 : QWidget(parent) 00041 { 00042 setAcceptDrops(true); 00043 } 00044 00045 void QmitkExtDnDFrameWidget::dragEnterEvent( QDragEnterEvent *event ) 00046 { // accept drags 00047 event->accept(); 00048 } 00049 void QmitkExtDnDFrameWidget::dropEvent( QDropEvent * event ) 00050 { //open dragged files 00051 00052 mitk::IDataStorageService::Pointer service = 00053 berry::Platform::GetServiceRegistry().GetServiceById<mitk::IDataStorageService>(mitk::IDataStorageService::ID); 00054 00055 mitk::DataStorage::Pointer ds; 00056 if (service.IsNotNull()) 00057 ds = service->GetActiveDataStorage()->GetDataStorage(); 00058 else 00059 return; 00060 00061 QList<QUrl> fileNames = event->mimeData()->urls(); 00062 00063 bool dsmodified = false; 00064 for (QList<QUrl>::Iterator fileName = fileNames.begin(); 00065 fileName != fileNames.end(); ++fileName) 00066 { 00067 if ( fileName->toLocalFile().right(5) == ".mitk" ) 00068 { 00069 mitk::SceneIO::Pointer sceneIO = mitk::SceneIO::New(); 00070 00071 bool clearDataStorageFirst(false); 00072 mitk::ProgressBar::GetInstance()->AddStepsToDo(2); 00073 ds = sceneIO->LoadScene( fileName->toLocalFile().toLocal8Bit().constData(), ds, clearDataStorageFirst ); 00074 dsmodified = true; 00075 mitk::ProgressBar::GetInstance()->Progress(2); 00076 } 00077 else 00078 { 00079 mitk::DataNodeFactory::Pointer nodeReader = mitk::DataNodeFactory::New(); 00080 try 00081 { 00082 nodeReader->SetFileName(fileName->toLocalFile().toLatin1().data()); 00083 nodeReader->Update(); 00084 for ( unsigned int i = 0 ; i < nodeReader->GetNumberOfOutputs( ); ++i ) 00085 { 00086 mitk::DataNode::Pointer node; 00087 node = nodeReader->GetOutput(i); 00088 if ( node->GetData() != NULL ) 00089 { 00090 ds->Add(node); 00091 dsmodified = true; 00092 } 00093 } 00094 } 00095 catch(...) 00096 { 00097 00098 } 00099 } 00100 } 00101 00102 if(dsmodified) 00103 { 00104 // get all nodes that have not set "includeInBoundingBox" to false 00105 mitk::NodePredicateNot::Pointer pred 00106 = mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("includeInBoundingBox" 00107 , mitk::BoolProperty::New(false))); 00108 00109 mitk::DataStorage::SetOfObjects::ConstPointer rs = ds->GetSubset(pred); 00110 // calculate bounding geometry of these nodes 00111 mitk::TimeSlicedGeometry::Pointer bounds = ds->ComputeBoundingGeometry3D(rs); 00112 // initialize the views to the bounding geometry 00113 mitk::RenderingManager::GetInstance()->InitializeViews(bounds); 00114 } 00115 }