I modified the QmitkExtFileOpenAction to allow me to select if I want to make
it only open .mitk project files. We have a different method of opening
images, but I need to be able to open a project, so I just modified the action
to have an option.
/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date: 2010-01-16 19:57:43 +0100 (Sa, 16 Jan 2010) $
Version: $Revision: 21070 $
Copyright (c) German Cancer Research Center, Division of Medical and
Biological Informatics. All rights reserved.
See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef QMITKEXTFILEOPENACTION_H_
#define QMITKEXTFILEOPENACTION_H_
#ifdef __MINGW32__
// We need to inlclude winbase.h here in order to declare
// atomic intrinsics like InterlockedIncrement correctly.
// Otherwhise, they would be declared wrong within qatomic_windows.h .
#include <windows.h>
#endif
#include <QAction>
#include <QIcon>
#include <org_mitk_gui_qt_ext_Export.h>
#include <berryIWorkbenchWindow.h>
#include <berryIPreferences.h>
class MITK_QT_COMMON_EXT_EXPORT QmitkExtFileOpenAction : public QAction
{
Q_OBJECT
public:
QmitkExtFileOpenAction(berry::IWorkbenchWindow::Pointer window, bool projectsOnly = false);
QmitkExtFileOpenAction(const QIcon & icon, berry::IWorkbenchWindow::Pointer window, bool projectsOnly = false);
/// Set to true to so that this action will only allow selection of .mitk project files and not images.
void SetOpenProjectsOnly(bool);
bool GetOpenProjectsOnly() const;
protected slots:
void Run();
private:
void init ( berry::IWorkbenchWindow::Pointer window );
berry::IWorkbenchWindow::Pointer m_Window;
berry::IPreferences::WeakPtr m_GeneralPreferencesNode;
bool m_OpenProjectsOnly;
};
#endif /*QMITKEXTFILEOPENACTION_H_*/
/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date: 2010-01-16 19:57:43 +0100 (Sa, 16 Jan 2010) $
Version: $Revision: 21070 $
Copyright (c) German Cancer Research Center, Division of Medical and
Biological Informatics. All rights reserved.
See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#include "QmitkExtFileOpenAction.h"
#include <QFileDialog>
#include <QFileInfo>
#include <mitkDataNodeFactory.h>
#include "mitkCoreObjectFactory.h"
#include "mitkSceneIO.h"
#include "mitkProgressBar.h"
#include <mitkCoreExtObjectFactory.h>
#include <mitkDataStorageEditorInput.h>
#include <berryIEditorPart.h>
#include <berryIWorkbenchPage.h>
#include <berryIPreferencesService.h>
#include <berryIWorkbench.h>
#include <berryPlatform.h>
#include "mitkProperties.h"
#include "mitkNodePredicateData.h"
#include "mitkNodePredicateNot.h"
#include "mitkNodePredicateProperty.h"
#include "QmitkStdMultiWidgetEditor.h"
QmitkExtFileOpenAction::QmitkExtFileOpenAction(berry::IWorkbenchWindow::Pointer window, bool projectsOnly)
: QAction(0)
{
SetOpenProjectsOnly(projectsOnly);
this->init(window);
}
QmitkExtFileOpenAction::QmitkExtFileOpenAction(const QIcon & icon, berry::IWorkbenchWindow::Pointer window, bool projectsOnly)
: QAction(0)
{
this->setIcon(icon);
SetOpenProjectsOnly(projectsOnly);
this->init(window);
}
void QmitkExtFileOpenAction::SetOpenProjectsOnly(bool projectsOnly)
{
m_OpenProjectsOnly = projectsOnly;
if (m_OpenProjectsOnly)
{
this->setText("&Open Project...");
}
else
{
this->setText("&Open...");
}
}
bool QmitkExtFileOpenAction::GetOpenProjectsOnly() const
{
return m_OpenProjectsOnly;
}
void QmitkExtFileOpenAction::init(berry::IWorkbenchWindow::Pointer window)
{
m_Window = window;
this->setParent(static_cast<QWidget*>(m_Window->GetShell()->GetControl()));
this->setToolTip("Open data files (images, surfaces,...) and project files (.mitk)");
berry::IPreferencesService::Pointer prefService
= berry::Platform::GetServiceRegistry()
.GetServiceById<berry::IPreferencesService>(berry::IPreferencesService::ID);
m_GeneralPreferencesNode = prefService->GetSystemPreferences()->Node("/General");
this->connect(this, SIGNAL(triggered(bool)), this, SLOT(Run()));
}
void QmitkExtFileOpenAction::Run()
{
/**
* @brief stores the last path of last opened file
*/
static QString m_LastPath;
if(m_GeneralPreferencesNode.Lock().IsNotNull())
{
if(m_LastPath.isEmpty())
m_LastPath = QString::fromStdString(m_GeneralPreferencesNode.Lock()->Get("LastFileOpenPath", ""));
}
//QFileDialog dialog(static_cast<QWidget*>(m_Window->GetShell()->GetControl()));
//dialog.setFileMode(QFileDialog::ExistingFiles);
//QStringList filters;
//filters << "Images (*.pic *.pic.gz *.vti *.dcm *.nhdr *.nrrd *.mhd)"
// << "Surfaces (*.stl *.vtk *.vtp)"
// << "MITK Pointset (*.mps)"
// << "All Files (*.*)";
//dialog.setFilters(filters);
std::stringstream ss;
if (!m_OpenProjectsOnly)
{
ss << mitk::CoreObjectFactory::GetInstance()->GetFileExtensions();
}
std::string fileExtensions = ss.str();
fileExtensions.append("MITK Scene Files (*.mitk)");
if (!m_OpenProjectsOnly)
{
fileExtensions.insert( fileExtensions.find("all (") + 5, "*.mitk " );
}
QStringList fileNames = QFileDialog::getOpenFileNames(NULL, "Open", m_LastPath, fileExtensions.c_str() );
//if (dialog.exec())
// fileNames = dialog.selectedFiles();
if (fileNames.empty())
return;
// check if there is an open perspective, if not open the default perspective
if (m_Window->GetActivePage().IsNull())
{
std::string defaultPerspId = m_Window->GetWorkbench()->GetPerspectiveRegistry()->GetDefaultPerspective();
m_Window->GetWorkbench()->ShowPerspective(defaultPerspId, m_Window);
}
QFileInfo info(fileNames.at(0));
m_LastPath = info.filePath();
if(m_GeneralPreferencesNode.Lock().IsNotNull())
{
m_GeneralPreferencesNode.Lock()->Put("LastFileOpenPath", m_LastPath.toStdString());
m_GeneralPreferencesNode.Lock()->Flush();
}
mitk::DataStorageEditorInput::Pointer editorInput;
mitk::DataStorage::Pointer dataStorage;
QmitkStdMultiWidgetEditor::Pointer multiWidgetEditor;
berry::IEditorPart::Pointer editor = m_Window->GetActivePage()->GetActiveEditor();
if (editor.Cast<QmitkStdMultiWidgetEditor>().IsNull())
{
editorInput = new mitk::DataStorageEditorInput();
dataStorage = editorInput->GetDataStorageReference()->GetDataStorage();
}
else
{
multiWidgetEditor = editor.Cast<QmitkStdMultiWidgetEditor>();
dataStorage = multiWidgetEditor->GetEditorInput().Cast<mitk::DataStorageEditorInput>()->GetDataStorageReference()->GetDataStorage();
}
if (multiWidgetEditor.IsNull())
{
berry::IEditorPart::Pointer editor = m_Window->GetActivePage()->OpenEditor(editorInput, QmitkStdMultiWidgetEditor::EDITOR_ID);
multiWidgetEditor = editor.Cast<QmitkStdMultiWidgetEditor>();
}
else
{
multiWidgetEditor->GetStdMultiWidget()->RequestUpdate();
}
bool dsmodified = false;
for (QStringList::Iterator fileName = fileNames.begin();
fileName != fileNames.end(); ++fileName)
{
if ( fileName->right(5) == ".mitk" )
{
mitk::SceneIO::Pointer sceneIO = mitk::SceneIO::New();
bool clearDataStorageFirst(false);
mitk::ProgressBar::GetInstance()->AddStepsToDo(2);
dataStorage = sceneIO->LoadScene( fileName->toLocal8Bit().constData(), dataStorage, clearDataStorageFirst );
dsmodified = true;
mitk::ProgressBar::GetInstance()->Progress(2);
}
else if (!m_OpenProjectsOnly)
{
mitk::DataNodeFactory::Pointer nodeReader = mitk::DataNodeFactory::New();
try
{
nodeReader->SetFileName(fileName->toLocal8Bit().data());
nodeReader->Update();
for ( unsigned int i = 0 ; i < nodeReader->GetNumberOfOutputs( ); ++i )
{
mitk::DataNode::Pointer node;
node = nodeReader->GetOutput(i);
if ( node->GetData() != NULL )
{
dataStorage->Add(node);
dsmodified = true;
}
}
}
catch(...)
{
}
}
}
if(dsmodified)
{
// get all nodes that have not set "includeInBoundingBox" to false
mitk::NodePredicateNot::Pointer pred
= mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("includeInBoundingBox"
, mitk::BoolProperty::New(false)));
mitk::DataStorage::SetOfObjects::ConstPointer rs = dataStorage->GetSubset(pred);
// calculate bounding geometry of these nodes
mitk::TimeSlicedGeometry::Pointer bounds = dataStorage->ComputeBoundingGeometry3D(rs);
// initialize the views to the bounding geometry
mitk::RenderingManager::GetInstance()->InitializeViews(bounds);
}
}
------------------------------------------------------------------------------
Using storage to extend the benefits of virtualization and iSCSI
Virtualization increases hardware utilization and delivers a new level of
agility. Learn what those decisions are and how to modernize your storage
and backup environments for virtualization.
http://www.accelacomm.com/jaw/sfnl/114/51434361/
_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users