diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.cpp b/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.cpp new file mode 100644 index 0000000000..c3e5b48e43 --- /dev/null +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.cpp @@ -0,0 +1,290 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date: 2009-05-12 19:14:45 +0200 (Di, 12 Mai 2009) $ +Version: $Revision: 1.12 $ + +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 "QmitkNavigationToolCreationWizardWidget.h" + +//mitk headers +#include "mitkTrackingTypes.h" +#include +#include +#include +#include +#include +#include +#include + +//qt headers +#include +#include + +//poco headers +#include + +const std::string QmitkNavigationToolCreationWizardWidget::VIEW_ID = "org.mitk.views.navigationtoolmanagementwidget"; + +QmitkNavigationToolCreationWizardWidget::QmitkNavigationToolCreationWizardWidget(QWidget* parent, Qt::WindowFlags f) + : QWidget(parent, f) +{ + m_Controls = NULL; + CreateQtPartControl(this); + CreateConnections(); + + m_Controls->m_SurfaceChooser->SetAutoSelectNewItems(true); +} + + +QmitkNavigationToolCreationWizardWidget::~QmitkNavigationToolCreationWizardWidget() +{ +} + +void QmitkNavigationToolCreationWizardWidget::CreateQtPartControl(QWidget *parent) + { + if (!m_Controls) + { + // create GUI widgets + m_Controls = new Ui::QmitkNavigationToolCreationWizardWidgetControls; + m_Controls->setupUi(parent); + } + } + +void QmitkNavigationToolCreationWizardWidget::CreateConnections() + { + if ( m_Controls ) + { + //main widget page: + connect( (QObject*)(m_Controls->m_AddTool), SIGNAL(clicked()), this, SLOT(OnAddTool()) ); + connect( (QObject*)(m_Controls->m_DeleteTool), SIGNAL(clicked()), this, SLOT(OnDeleteTool()) ); + connect( (QObject*)(m_Controls->m_EditTool), SIGNAL(clicked()), this, SLOT(OnEditTool()) ); + connect( (QObject*)(m_Controls->m_LoadStorage), SIGNAL(clicked()), this, SLOT(OnLoadStorage()) ); + connect( (QObject*)(m_Controls->m_SaveStorage), SIGNAL(clicked()), this, SLOT(OnSaveStorage()) ); + + //widget page "add tool": + connect( (QObject*)(m_Controls->m_cancel), SIGNAL(clicked()), this, SLOT(OnCancel()) ); + connect( (QObject*)(m_Controls->m_finished), SIGNAL(clicked()), this, SLOT(OnFinished()) ); + connect( (QObject*)(m_Controls->m_LoadSurface), SIGNAL(clicked()), this, SLOT(OnLoadSurface()) ); + connect( (QObject*)(m_Controls->m_LoadCalibrationFile), SIGNAL(clicked()), this, SLOT(OnLoadCalibrationFile()) ); + } + } + +void QmitkNavigationToolCreationWizardWidget::Initialize(mitk::DataStorage* dataStorage) + { + m_DataStorage = dataStorage; + } + +//################################################################################## +//############################## slots: main widget ################################ +//################################################################################## + +void QmitkNavigationToolCreationWizardWidget::OnAddTool() + { + //initialize UI components + m_Controls->m_SurfaceChooser->SetDataStorage(m_DataStorage); + m_Controls->AddToolLabel->setText("Add Tool:"); + m_Controls->m_MainWidgets->setCurrentIndex(1); + + //reset input fields + m_Controls->m_ToolNameEdit->setText(""); + m_Controls->m_IdentifierEdit->setText("NavigationTool#"+QString::number(m_NavigationToolStorage->GetToolCount())); + m_Controls->m_SerialNumberEdit->setText(""); + m_Controls->m_CalibrationFileName->setText(""); + + m_edit = false; + } + +void QmitkNavigationToolCreationWizardWidget::OnDeleteTool() + { + //if no item is selected, show error message: + if (m_Controls->m_ToolList->currentItem() == NULL) {MessageBox("Error: Please select tool first!");return;} + + m_DataStorage->Remove(m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row())->GetDataNode()); + m_NavigationToolStorage->DeleteTool(m_Controls->m_ToolList->currentIndex().row()); + UpdateToolTable(); + + } + +void QmitkNavigationToolCreationWizardWidget::OnEditTool() + { + //if no item is selected, show error message: + if (m_Controls->m_ToolList->currentItem() == NULL) {MessageBox("Error: Please select tool first!");return;} + + //initialize UI components + m_Controls->m_SurfaceChooser->SetDataStorage(m_DataStorage); + m_Controls->AddToolLabel->setText("Edit Tool:"); + m_Controls->m_MainWidgets->setCurrentIndex(1); + + //fill forms + mitk::NavigationTool::Pointer selectedTool = m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()); + m_Controls->m_ToolNameEdit->setText(QString(selectedTool->GetDataNode()->GetName().c_str())); + m_Controls->m_IdentifierEdit->setText(QString(selectedTool->GetIdentifier().c_str())); + m_Controls->m_SerialNumberEdit->setText(QString(selectedTool->GetSerialNumber().c_str())); + switch(selectedTool->GetTrackingDeviceType()) + { + case mitk::NDIAurora: + m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(0);break; + case mitk::NDIPolaris: + m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(1);break; + case mitk::ClaronMicron: + m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(2);break; + default: + m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(0); + } + m_Controls->m_CalibrationFileName->setText(QString(selectedTool->GetCalibrationFile().c_str())); + switch(selectedTool->GetType()) + { + case mitk::NavigationTool::Instrument: + m_Controls->m_ToolTypeChooser->setCurrentIndex(0); break; + case mitk::NavigationTool::Fiducial: + m_Controls->m_ToolTypeChooser->setCurrentIndex(1); break; + case mitk::NavigationTool::Skinmarker: + m_Controls->m_ToolTypeChooser->setCurrentIndex(2); break; + case mitk::NavigationTool::Unknown: + m_Controls->m_ToolTypeChooser->setCurrentIndex(3); break; + } + + m_Controls->m_SurfaceChooser->SetSelectedNode(selectedTool->GetDataNode()); + m_edit = true; + } + +void QmitkNavigationToolCreationWizardWidget::OnLoadStorage() + { + mitk::NavigationToolStorageDeserializer::Pointer myDeserializer = mitk::NavigationToolStorageDeserializer::New(m_DataStorage); + std::string filename = QFileDialog::getOpenFileName(NULL,tr("Open Navigation Tool"), "/", "*.*").toAscii().data(); + if (filename == "") return; + mitk::NavigationToolStorage::Pointer tempStorage = myDeserializer->Deserialize(filename); + if (tempStorage.IsNull()) MessageBox("Error" + myDeserializer->GetErrorMessage()); + else + { + m_NavigationToolStorage = tempStorage; + Poco::Path myPath = Poco::Path(filename.c_str()); + m_Controls->m_StorageName->setText(myPath.getFileName().c_str()); + } + UpdateToolTable(); + } + +void QmitkNavigationToolCreationWizardWidget::OnSaveStorage() + { + //read in filename + std::string filename = QFileDialog::getSaveFileName(NULL,tr("Save Navigation Tool"), "/", "*.*").toAscii().data(); + if (filename == "") return; //canceled by the user + + //serialize tool storage + mitk::NavigationToolStorageSerializer::Pointer mySerializer = mitk::NavigationToolStorageSerializer::New(); + if (!mySerializer->Serialize(filename,m_NavigationToolStorage)) + { + MessageBox("Error: " + mySerializer->GetErrorMessage()); + return; + } + Poco::Path myPath = Poco::Path(filename.c_str()); + m_Controls->m_StorageName->setText(myPath.getFileName().c_str()); + + } + + +//################################################################################## +//############################## slots: add tool widget ############################ +//################################################################################## + +void QmitkNavigationToolCreationWizardWidget::OnFinished() + { + mitk::NavigationTool::Pointer workTool; + + if (m_edit) //here we edit a existing tool + { + workTool = m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()); + + //edit existing DataNode... + workTool->GetDataNode()->SetName(m_Controls->m_ToolNameEdit->text().toLatin1()); + workTool->GetDataNode()->SetData(m_Controls->m_SurfaceChooser->GetSelectedNode()->GetData()); + } + else //here we create a new tool + { + workTool = mitk::NavigationTool::New(); + + //create DataNode... + mitk::DataNode::Pointer newNode = mitk::DataNode::New(); + newNode->SetName(m_Controls->m_ToolNameEdit->text().toLatin1()); + newNode->SetData(m_Controls->m_SurfaceChooser->GetSelectedNode()->GetData()); + m_DataStorage->Add(newNode); + workTool->SetDataNode(newNode); + } + + //fill NavigationTool object + workTool->SetCalibrationFile(m_Controls->m_CalibrationFileName->text().toAscii().data()); + workTool->SetIdentifier(m_Controls->m_IdentifierEdit->text().toAscii().data()); + workTool->SetSerialNumber(m_Controls->m_SerialNumberEdit->text().toAscii().data()); + //Tracking Device + if (m_Controls->m_TrackingDeviceTypeChooser->currentText()=="NDI Aurora") workTool->SetTrackingDeviceType(mitk::NDIAurora); + else if (m_Controls->m_TrackingDeviceTypeChooser->currentText()=="NDI Polaris") workTool->SetTrackingDeviceType(mitk::NDIPolaris); + else if (m_Controls->m_TrackingDeviceTypeChooser->currentText()=="Claron Technology Micron Tracker") workTool->SetTrackingDeviceType(mitk::ClaronMicron); + else workTool->SetTrackingDeviceType(mitk::TrackingSystemNotSpecified); + //ToolType + if (m_Controls->m_ToolTypeChooser->currentText()=="Instrument") workTool->SetType(mitk::NavigationTool::Instrument); + else if (m_Controls->m_ToolTypeChooser->currentText()=="Fiducial") workTool->SetType(mitk::NavigationTool::Fiducial); + else if (m_Controls->m_ToolTypeChooser->currentText()=="Skinmarker") workTool->SetType(mitk::NavigationTool::Skinmarker); + else workTool->SetType(mitk::NavigationTool::Unknown); + + if (!m_edit) m_NavigationToolStorage->AddTool(workTool); + + UpdateToolTable(); + + m_Controls->m_MainWidgets->setCurrentIndex(0); + } + +void QmitkNavigationToolCreationWizardWidget::OnCancel() + { + m_Controls->m_MainWidgets->setCurrentIndex(0); + } + +void QmitkNavigationToolCreationWizardWidget::OnLoadSurface() + { + std::string filename = QFileDialog::getOpenFileName(NULL,tr("Open Surface"), "/", "*.stl").toLatin1().data(); + mitk::STLFileReader::Pointer stlReader = mitk::STLFileReader::New(); + try + { + stlReader->SetFileName( filename.c_str() ); + stlReader->Update(); + } + catch (...) + { + } + + if ( stlReader->GetOutput() == NULL ); + else + { + mitk::DataNode::Pointer newNode = mitk::DataNode::New(); + newNode->SetName(filename); + newNode->SetData(stlReader->GetOutput()); + m_DataStorage->Add(newNode); + } + } + +void QmitkNavigationToolCreationWizardWidget::OnLoadCalibrationFile() + { + m_Controls->m_CalibrationFileName->setText(QFileDialog::getOpenFileName(NULL,tr("Open Calibration File"), "/", "*.*")); + } + + + +//################################################################################## +//############################## private help methods ############################## +//################################################################################## +void QmitkNavigationToolCreationWizardWidget::MessageBox(std::string s) + { + QMessageBox msgBox; + msgBox.setText(s.c_str()); + msgBox.exec(); + } \ No newline at end of file diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.h b/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.h new file mode 100644 index 0000000000..715d70c302 --- /dev/null +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.h @@ -0,0 +1,83 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date: 2009-05-12 19:14:45 +0200 (Di, 12 Mai 2009) $ +Version: $Revision: 1.12 $ + +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 QmitkNavigationToolCreationWizardWidget_H +#define QmitkNavigationToolCreationWizardWidget_H + +//QT headers +#include + +//mitk headers +#include "MitkIGTUIExports.h" +#include "mitkNavigationTool.h" +#include + +//ui header +#include "ui_QmitkNavigationToolCreationWizardWidgetControls.h" + + /** Documentation: + * \brief An object of this class offers an UI to manage NavigationTools and + * NavigationToolStorages. This means a user may create, save and load + * single NavigationTools and/or NavigationToolStorages with this widget. + * + * Be sure to call the Initialize-methode before you start the widget + * otherwise some errors might occure. + * + * \ingroup IGTUI + */ +class MitkIGTUI_EXPORT QmitkNavigationToolCreationWizardWidget : public QWidget +{ + Q_OBJECT + + public: + static const std::string VIEW_ID; + + void Initialize(mitk::DataStorage* dataStorage); + + QmitkNavigationToolCreationWizardWidget(QWidget* parent = 0, Qt::WindowFlags f = 0); + ~QmitkNavigationToolCreationWizardWidget(); + + public signals: + + void NavigationToolFinished(); + void Canceled(); + + protected slots: + + void OnCancel(); + void OnFinished(); + void OnLoadSurface(); + void OnLoadCalibrationFile(); + + + protected: + + /// \brief Creation of the connections + virtual void CreateConnections(); + + virtual void CreateQtPartControl(QWidget *parent); + + Ui::QmitkNavigationToolCreationWizardWidgetControls* m_Controls; + + /** @brief holds the DataStorage */ + mitk::DataStorage* m_DataStorage; + + //############## private help methods ####################### + void MessageBox(std::string s); + +}; +#endif \ No newline at end of file diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.ui b/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.ui new file mode 100644 index 0000000000..8ae705ae76 --- /dev/null +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolCreationWizardWidget.ui @@ -0,0 +1,391 @@ + + + QmitkNavigationToolCreationWizardWidgetControls + + + + 0 + 0 + 321 + 272 + + + + Form + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; text-decoration: underline;">New Navigation Tool</span></p></body></html> + + + + + + + + + Device Type: + + + + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + + NDI Aurora + + + + + NDI Polaris + + + + + Claron Technology Micron Tracker + + + + + + + + + + 0 + + + + + 0 + 0 + 303 + 83 + + + + Basic Information + + + + + + + + + 100 + 0 + + + + Name: + + + + + + + + + + + + + + + 100 + 0 + + + + Calibration File: + + + + + + + + + + + 40 + 16777215 + + + + Load + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + -20 + 0 + 307 + 72 + + + + Tool Visualization + + + + + + Use Simple Sphere + + + true + + + + + + + + + Use Surface: + + + + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + + + + + + 40 + 16777215 + + + + Load + + + + + + + + + Qt::Vertical + + + + 20 + 8 + + + + + + + + + Advanced + + + + + + + + + 100 + 0 + + + + Tool Type: + + + + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + + Instrument + + + + + Fiducial + + + + + Skinmarker + + + + + Unkown + + + + + + + + + + + + + 100 + 0 + + + + Identifier: + + + + + + + + + + + + + + + 100 + 0 + + + + Serial Number: + + + + + + + + + + + + Qt::Vertical + + + + 20 + 7 + + + + + + + + + + + + Qt::Horizontal + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Finished + + + + + + + + + + QmitkDataStorageComboBox + QComboBox +
QmitkDataStorageComboBox.h
+
+
+ + +
diff --git a/Modules/IGTUI/files.cmake b/Modules/IGTUI/files.cmake index 3d14e93b40..46f7349a49 100644 --- a/Modules/IGTUI/files.cmake +++ b/Modules/IGTUI/files.cmake @@ -1,57 +1,59 @@ SET(CPP_FILES Qmitk/QmitkTrackingDeviceWidget.cpp Qmitk/QmitkTrackingDeviceConfigurationWidget.cpp Qmitk/QmitkNDIConfigurationWidget.cpp Qmitk/QmitkFiducialRegistrationWidget.cpp Qmitk/QmitkNDIToolDelegate.cpp Qmitk/QmitkNavigationToolManagementWidget.cpp Qmitk/QmitkIGTLoggerWidget.cpp Qmitk/QmitkUpdateTimerWidget.cpp Qmitk/QmitkToolDistanceWidget.cpp Qmitk/QmitkToolTrackingStatusWidget.cpp Qmitk/QmitkTrackingSourcesCheckBoxPanelWidget.cpp Qmitk/QmitkIGTPlayerWidget.cpp Qmitk/QmitkIGTConnectionWidget.cpp Qmitk/QmitkToolSelectionWidget.cpp + Qmitk/QmitkNavigationToolCreationWizardWidget.cpp ) SET(UI_FILES Qmitk/QmitkNavigationToolManagementWidgetControls.ui Qmitk/QmitkTrackingDeviceConfigurationWidgetControls.ui Qmitk/QmitkNDIConfigurationWidget.ui Qmitk/QmitkFiducialRegistrationWidget.ui Qmitk/QmitkIGTLoggerWidgetControls.ui Qmitk/QmitkUpdateTimerWidgetControls.ui Qmitk/QmitkToolDistanceWidgetControls.ui Qmitk/QmitkToolTrackingStatusWidgetControls.ui Qmitk/QmitkTrackingSourcesCheckBoxPanelWidgetControls.ui Qmitk/QmitkIGTPlayerWidgetControls.ui Qmitk/QmitkIGTConnectionWidgetControls.ui Qmitk/QmitkToolSelectionWidgetControls.ui + Qmitk/QmitkNavigationToolCreationWizardWidget.ui ) SET(MOC_H_FILES Qmitk/QmitkNavigationToolManagementWidget.h Qmitk/QmitkTrackingDeviceWidget.h Qmitk/QmitkTrackingDeviceConfigurationWidget.h Qmitk/QmitkNDIConfigurationWidget.h Qmitk/QmitkFiducialRegistrationWidget.h Qmitk/QmitkNDIToolDelegate.h Qmitk/QmitkIGTLoggerWidget.h Qmitk/QmitkUpdateTimerWidget.h Qmitk/QmitkToolDistanceWidget.h Qmitk/QmitkToolTrackingStatusWidget.h Qmitk/QmitkTrackingSourcesCheckBoxPanelWidget.h Qmitk/QmitkIGTPlayerWidget.h Qmitk/QmitkIGTConnectionWidget.h Qmitk/QmitkToolSelectionWidget.h + Qmitk/QmitkNavigationToolCreationWizardWidget.h ) SET(QRC_FILES resources/IGTUI.qrc ) -