Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkFileOpenAction.h"
00019
00020 #include <QFileDialog>
00021 #include <QFileInfo>
00022 #include <mitkDataNodeFactory.h>
00023
00024 #include "mitkProgressBar.h"
00025
00026 #include <mitkCoreObjectFactory.h>
00027 #include <mitkDataStorageEditorInput.h>
00028 #include <berryIEditorPart.h>
00029 #include <berryIWorkbenchPage.h>
00030 #include <berryIPreferencesService.h>
00031 #include <berryPlatform.h>
00032
00033 #include "mitkProperties.h"
00034 #include "mitkNodePredicateData.h"
00035 #include "mitkNodePredicateNot.h"
00036 #include "mitkNodePredicateProperty.h"
00037
00038
00039 #include "QmitkStdMultiWidgetEditor.h"
00040
00041 QmitkFileOpenAction::QmitkFileOpenAction(berry::IWorkbenchWindow::Pointer window)
00042 : QAction(0)
00043 {
00044 this->init(window);
00045 }
00046
00047 QmitkFileOpenAction::QmitkFileOpenAction(const QIcon & icon, berry::IWorkbenchWindow::Pointer window)
00048 : QAction(0)
00049 {
00050 this->setIcon(icon);
00051
00052 this->init(window);
00053 }
00054
00055 void QmitkFileOpenAction::init(berry::IWorkbenchWindow::Pointer window)
00056 {
00057 m_Window = window.GetPointer();
00058 this->setParent(static_cast<QWidget*>(m_Window->GetShell()->GetControl()));
00059 this->setText("&Open...");
00060 this->setToolTip("Open data files (images, surfaces,...) and project files (.mitk)");
00061
00062 berry::IPreferencesService::Pointer prefService
00063 = berry::Platform::GetServiceRegistry()
00064 .GetServiceById<berry::IPreferencesService>(berry::IPreferencesService::ID);
00065 m_GeneralPreferencesNode = prefService->GetSystemPreferences()->Node("/General");
00066
00067 this->connect(this, SIGNAL(triggered(bool)), this, SLOT(Run()));
00068 }
00069
00070 void QmitkFileOpenAction::Run()
00071 {
00075 static QString m_LastPath;
00076
00077 if(m_GeneralPreferencesNode.Lock().IsNotNull())
00078 {
00079 if(m_LastPath.isEmpty())
00080 m_LastPath = QString::fromStdString(m_GeneralPreferencesNode.Lock()->Get("LastFileOpenPath", ""));
00081 }
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 QStringList fileNames = QFileDialog::getOpenFileNames(NULL,"Open",m_LastPath,mitk::CoreObjectFactory::GetInstance()->GetFileExtensions());
00093
00094
00095
00096
00097 if (fileNames.empty())
00098 return;
00099
00100 QFileInfo info(fileNames.at(0));
00101 m_LastPath = info.filePath();
00102 if(m_GeneralPreferencesNode.Lock().IsNotNull())
00103 {
00104 m_GeneralPreferencesNode.Lock()->Put("LastFileOpenPath", m_LastPath.toStdString());
00105 m_GeneralPreferencesNode.Lock()->Flush();
00106 }
00107
00108 mitk::DataStorageEditorInput::Pointer editorInput;
00109 mitk::DataStorage::Pointer dataStorage;
00110 QmitkStdMultiWidgetEditor::Pointer multiWidgetEditor;
00111 berry::IEditorPart::Pointer editor = m_Window->GetActivePage()->GetActiveEditor();
00112 if (editor.Cast<QmitkStdMultiWidgetEditor>().IsNull())
00113 {
00114 editorInput = new mitk::DataStorageEditorInput();
00115 dataStorage = editorInput->GetDataStorageReference()->GetDataStorage();
00116 }
00117 else
00118 {
00119 multiWidgetEditor = editor.Cast<QmitkStdMultiWidgetEditor>();
00120 dataStorage = multiWidgetEditor->GetEditorInput().Cast<mitk::DataStorageEditorInput>()->GetDataStorageReference()->GetDataStorage();
00121 }
00122
00123 if (multiWidgetEditor.IsNull())
00124 {
00125 berry::IEditorPart::Pointer editor = m_Window->GetActivePage()->OpenEditor(editorInput, QmitkStdMultiWidgetEditor::EDITOR_ID);
00126 multiWidgetEditor = editor.Cast<QmitkStdMultiWidgetEditor>();
00127 }
00128 else
00129 {
00130 multiWidgetEditor->GetStdMultiWidget()->RequestUpdate();
00131 }
00132
00133 bool dsmodified = false;
00134 for (QStringList::Iterator fileName = fileNames.begin();
00135 fileName != fileNames.end(); ++fileName)
00136 {
00137
00138 mitk::DataNodeFactory::Pointer nodeReader = mitk::DataNodeFactory::New();
00139 try
00140 {
00141 nodeReader->SetFileName(fileName->toStdString());
00142 nodeReader->Update();
00143 for ( unsigned int i = 0 ; i < nodeReader->GetNumberOfOutputs( ); ++i )
00144 {
00145 mitk::DataNode::Pointer node;
00146 node = nodeReader->GetOutput(i);
00147 if ( node->GetData() != NULL )
00148 {
00149 dataStorage->Add(node);
00150 dsmodified = true;
00151 }
00152 }
00153 }
00154 catch(...)
00155 {
00156
00157 }
00158
00159 }
00160
00161
00162 if(dsmodified)
00163 {
00164
00165 mitk::NodePredicateNot::Pointer pred
00166 = mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("includeInBoundingBox"
00167 , mitk::BoolProperty::New(false)));
00168
00169 mitk::DataStorage::SetOfObjects::ConstPointer rs = dataStorage->GetSubset(pred);
00170
00171 mitk::TimeSlicedGeometry::Pointer bounds = dataStorage->ComputeBoundingGeometry3D(rs);
00172
00173 mitk::RenderingManager::GetInstance()->InitializeViews(bounds);
00174 }
00175
00176
00177 }