diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.cpp b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.cpp index 7f6cc724ee..64cdde6d6d 100644 --- a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.cpp @@ -1,217 +1,230 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ 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. =========================================================================*/ // Blueberry #include #include // Qmitk #include "QmitkMITKIGTTrackingToolboxView.h" #include "QmitkStdMultiWidget.h" // Qt #include #include // MITK #include #include const std::string QmitkMITKIGTTrackingToolboxView::VIEW_ID = "org.mitk.views.mitkigttrackingtoolbox"; QmitkMITKIGTTrackingToolboxView::QmitkMITKIGTTrackingToolboxView() : QmitkFunctionality() , m_Controls( 0 ) , m_MultiWidget( NULL ) { m_TrackingTimer = new QTimer(this); m_tracking = false; m_logging = false; } QmitkMITKIGTTrackingToolboxView::~QmitkMITKIGTTrackingToolboxView() { } void QmitkMITKIGTTrackingToolboxView::CreateQtPartControl( QWidget *parent ) { // build up qt view, unless already done if ( !m_Controls ) { // create GUI widgets from the Qt Designer's .ui file m_Controls = new Ui::QmitkMITKIGTTrackingToolboxViewControls; m_Controls->setupUi( parent ); + //create connections connect( m_Controls->m_LoadTools, SIGNAL(clicked()), this, SLOT(OnLoadTools()) ); connect( m_Controls->m_StartTracking, SIGNAL(clicked()), this, SLOT(OnStartTracking()) ); connect( m_Controls->m_StopTracking, SIGNAL(clicked()), this, SLOT(OnStopTracking()) ); connect( m_TrackingTimer, SIGNAL(timeout()), this, SLOT(UpdateTrackingTimer())); connect( m_Controls->m_EnableLogging, SIGNAL(clicked()), this, SLOT(OnEnableLoggingClicked())); connect( m_Controls->m_ChooseFile, SIGNAL(clicked()), this, SLOT(OnChooseFileClicked())); - this->m_Controls->m_configurationWidget->EnableAdvancedUserControl(false); + //initialize widgets + m_Controls->m_configurationWidget->EnableAdvancedUserControl(false); + m_Controls->m_TrackingToolsStatusWidget->SetShowPositions(true); + m_Controls->m_TrackingToolsStatusWidget->SetTextAlignment(Qt::AlignLeft); } } void QmitkMITKIGTTrackingToolboxView::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) { m_MultiWidget = &stdMultiWidget; } void QmitkMITKIGTTrackingToolboxView::StdMultiWidgetNotAvailable() { m_MultiWidget = NULL; } void QmitkMITKIGTTrackingToolboxView::OnLoadTools() { //read in filename QString filename = QFileDialog::getOpenFileName(NULL,tr("Open Toolfile"), "/", tr("All Files (*.*)")); //later perhaps: tr("Toolfile (*.tfl)" if (filename.isNull()) return; //initialize tool storage m_toolStorage = mitk::NavigationToolStorage::New(); //read tool storage from disk mitk::NavigationToolStorageDeserializer::Pointer myDeserializer = mitk::NavigationToolStorageDeserializer::New(GetDataStorage()); m_toolStorage = myDeserializer->Deserialize(filename.toStdString()); if (m_toolStorage.IsNull()) { MessageBox(myDeserializer->GetErrorMessage()); m_toolStorage = NULL; return; } //update label Poco::Path myPath = Poco::Path(filename.toStdString()); //use this to seperate filename from path QString toolLabel = QString("Loaded Tools: ") + QString::number(m_toolStorage->GetToolCount()) + " Tools from " + myPath.getFileName().c_str(); m_Controls->m_toolLabel->setText(toolLabel); + + //update tool preview + m_Controls->m_TrackingToolsStatusWidget->PreShowTools(m_toolStorage); } void QmitkMITKIGTTrackingToolboxView::OnStartTracking() { //check if everything is ready to start tracking if (this->m_toolStorage.IsNull()) { MessageBox("Error: No Tools Loaded Yet!"); return; } else if (this->m_toolStorage->GetToolCount() == 0) { MessageBox("Error: No Way To Track Without Tools!"); return; } //build the IGT pipeline mitk::TrackingDeviceSourceConfigurator::Pointer myTrackingDeviceSourceFactory = mitk::TrackingDeviceSourceConfigurator::New(this->m_toolStorage,this->m_Controls->m_configurationWidget->GetTrackingDevice()); m_TrackingDeviceSource = myTrackingDeviceSourceFactory->CreateTrackingDeviceSource(this->m_ToolVisualizationFilter); if (m_TrackingDeviceSource.IsNull()) { MessageBox(myTrackingDeviceSourceFactory->GetErrorMessage()); return; } -for(int i=0; iGetNumberOfOutputs(); i++) //connect the tool visualization widget - m_Controls->m_TrackingToolsStatusWidget->AddNavigationData(m_ToolVisualizationFilter->GetOutput(i)); +std::cout << "Number of Outputs" << m_TrackingDeviceSource->GetNumberOfOutputs(); +for(int i=0; iGetNumberOfOutputs(); i++) //connect the tool visualization widget + { + m_Controls->m_TrackingToolsStatusWidget->AddNavigationData(m_TrackingDeviceSource->GetOutput(i)); + } -m_Controls->m_TrackingToolsStatusWidget->SetShowPositions(true); m_Controls->m_TrackingToolsStatusWidget->ShowStatusLabels(); -m_Controls->m_TrackingToolsStatusWidget->SetTextAlignment(Qt::AlignLeft); //set configuration finished this->m_Controls->m_configurationWidget->ConfigurationFinished(); //initialize tracking m_TrackingDeviceSource->Connect(); m_TrackingDeviceSource->StartTracking(); m_TrackingTimer->start(100); m_Controls->m_TrackingControlLabel->setText("Status: tracking"); //start logging if logging is on if (this->m_Controls->m_EnableLogging->isChecked()) StartLogging(); +this->m_Controls->m_LoadTools->setEnabled(false); + m_tracking = true; } void QmitkMITKIGTTrackingToolboxView::OnStopTracking() { if (!m_tracking) return; m_TrackingTimer->stop(); m_TrackingDeviceSource->StopTracking(); m_TrackingDeviceSource->Disconnect(); this->m_Controls->m_configurationWidget->Reset(); m_Controls->m_TrackingControlLabel->setText("Status: stopped"); if (m_logging) StopLogging(); +this->m_Controls->m_LoadTools->setEnabled(true); +m_Controls->m_TrackingToolsStatusWidget->RemoveStatusLabels(); +m_Controls->m_TrackingToolsStatusWidget->PreShowTools(m_toolStorage); } void QmitkMITKIGTTrackingToolboxView::MessageBox(std::string s) { QMessageBox msgBox; msgBox.setText(s.c_str()); msgBox.exec(); } void QmitkMITKIGTTrackingToolboxView::UpdateTrackingTimer() { m_ToolVisualizationFilter->Update(); - std::cout << "Position" << m_ToolVisualizationFilter->GetOutput(0)->GetPosition() << std::endl; + //std::cout << "Position" << m_ToolVisualizationFilter->GetOutput(0)->GetPosition() << std::endl; mitk::RenderingManager::GetInstance()->RequestUpdateAll(); if (m_logging) this->m_loggingFilter->Update(); m_Controls->m_TrackingToolsStatusWidget->Refresh(); } void QmitkMITKIGTTrackingToolboxView::OnEnableLoggingClicked() { if (this->m_tracking && this->m_Controls->m_EnableLogging->isChecked() && !this->m_logging) StartLogging(); else if (!this->m_Controls->m_EnableLogging->isChecked() && this->m_logging) StopLogging(); } void QmitkMITKIGTTrackingToolboxView::OnChooseFileClicked() { QString filename = QFileDialog::getSaveFileName(NULL,tr("Choose Logging File"), "/", "*.*"); this->m_Controls->m_LoggingFileName->setText(filename); } void QmitkMITKIGTTrackingToolboxView::StartLogging() { //initialize logging filter m_loggingFilter = mitk::NavigationDataRecorder::New(); m_loggingFilter->SetRecordingMode(mitk::NavigationDataRecorder::NormalFile); if (m_Controls->m_xmlFormat->isChecked()) m_loggingFilter->SetOutputFormat(mitk::NavigationDataRecorder::xml); else if (m_Controls->m_csvFormat->isChecked()) m_loggingFilter->SetOutputFormat(mitk::NavigationDataRecorder::csv); m_loggingFilter->SetFileName(m_Controls->m_LoggingFileName->text().toStdString().c_str()); //connect filter for(int i=0; iGetNumberOfOutputs(); i++){m_loggingFilter->AddNavigationData(m_ToolVisualizationFilter->GetOutput(i));} m_loggingFilter->StartRecording(); m_logging = true; } void QmitkMITKIGTTrackingToolboxView::StopLogging() { m_loggingFilter->StopRecording(); m_logging = false; } diff --git a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp index 46bfb1c4ec..bd655b92e7 100644 --- a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp +++ b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp @@ -1,162 +1,213 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-03-21 19:27:37 +0100 (Sa, 21 Mrz 2009) $ Version: $Revision: 16719 $ 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 "QmitkToolTrackingStatusWidget.h" QmitkToolTrackingStatusWidget::QmitkToolTrackingStatusWidget(QWidget* parent) : QWidget(parent), m_Controls(NULL), m_StatusLabels (NULL), m_NavigationDatas(NULL) { this->CreateQtPartControl( this ); m_ShowPositions = false; m_Alignment = Qt::AlignHCenter; + m_Style = QmitkToolTrackingStatusWidget::VerticalUpperStyle; } + +void QmitkToolTrackingStatusWidget::SetStyle(QmitkToolTrackingStatusWidget::Style newStyle) + { + m_Style = newStyle; + } + void QmitkToolTrackingStatusWidget::SetShowPositions(bool enable) { m_ShowPositions = enable; } void QmitkToolTrackingStatusWidget::SetTextAlignment(Qt::AlignmentFlag alignment) { m_Alignment = alignment; } QmitkToolTrackingStatusWidget::~QmitkToolTrackingStatusWidget() { //m_Controls = NULL; delete m_StatusLabels; delete m_NavigationDatas; } void QmitkToolTrackingStatusWidget::CreateQtPartControl(QWidget *parent) { if (!m_Controls) { // create GUI widgets m_Controls = new Ui::QmitkToolTrackingStatusWidgetControls; m_Controls->setupUi(parent); this->CreateConnections(); } } void QmitkToolTrackingStatusWidget::CreateConnections() { } void QmitkToolTrackingStatusWidget::SetNavigationDatas(std::vector* navDatas) { m_NavigationDatas = navDatas; } void QmitkToolTrackingStatusWidget::AddNavigationData(mitk::NavigationData::Pointer nd) { if(m_NavigationDatas == NULL) m_NavigationDatas = new std::vector(); m_NavigationDatas->push_back(nd); } void QmitkToolTrackingStatusWidget::Refresh() { if(m_NavigationDatas == NULL || m_NavigationDatas->size() <= 0) return; mitk::NavigationData* navData; for(unsigned int i = 0; i < m_NavigationDatas->size(); i++) { navData = m_NavigationDatas->at(i).GetPointer(); QString name(navData->GetName()); QString pos = ""; if (m_ShowPositions) { mitk::Point3D position = navData->GetPosition(); pos = " [" + QString::number(position[0]) + ";" + QString::number(position[1]) + ";" + QString::number(position[2]) + "]"; } - if(name.compare(m_StatusLabels->at(i)->text()) == 0) + if(name.compare(m_StatusLabels->at(i)->objectName()) == 0) { m_StatusLabels->at(i)->setText(name+pos); if(navData->IsDataValid()) m_StatusLabels->at(i)->setStyleSheet("QLabel{background-color: #8bff8b }"); else m_StatusLabels->at(i)->setStyleSheet("QLabel{background-color: #ff7878 }"); } } } void QmitkToolTrackingStatusWidget::ShowStatusLabels() { + RemoveGuiLabels(); if(m_NavigationDatas == NULL || m_NavigationDatas->size() <= 0) return; m_StatusLabels = new QVector(); mitk::NavigationData* navData; QLabel* label; for(unsigned int i = 0; i < m_NavigationDatas->size(); i++) { navData = m_NavigationDatas->at(i).GetPointer(); QString name(navData->GetName()); - std::cout << "Name: " <setObjectName(name); label->setAlignment(m_Alignment | Qt::AlignVCenter); label->setFrameStyle(QFrame::Panel | QFrame::Sunken); m_StatusLabels->append(label); - m_Controls->m_GridLayout->addWidget(m_StatusLabels->at(i),0,i); + if (m_Style == QmitkToolTrackingStatusWidget::VerticalUpperStyle) m_Controls->m_VerticalLayout->addWidget(m_StatusLabels->at(i)); + else m_Controls->m_GridLayout->addWidget(m_StatusLabels->at(i),0,i); + } } +void QmitkToolTrackingStatusWidget::PreShowTools(mitk::NavigationToolStorage::Pointer toolStorage) + { + QLabel* label; -void QmitkToolTrackingStatusWidget::RemoveStatusLabels() -{ + for(unsigned int i = 0; i < toolStorage->GetToolCount(); i++) + { + QString name(toolStorage->GetTool(i)->GetToolName().c_str()); + + label = new QLabel(name, this); + label->setObjectName(name); + label->setAlignment(m_Alignment | Qt::AlignVCenter); + label->setFrameStyle(QFrame::Panel | QFrame::Sunken); + if (m_Style == QmitkToolTrackingStatusWidget::VerticalUpperStyle) m_Controls->m_VerticalLayout->addWidget(label); + else m_Controls->m_GridLayout->addWidget(label); + + } - while(m_Controls->m_GridLayout->count() > 0) - { - QWidget* actWidget = m_Controls->m_GridLayout->itemAt(0)->widget(); - m_Controls->m_GridLayout->removeWidget(actWidget); - delete actWidget; } + +void QmitkToolTrackingStatusWidget::RemoveStatusLabels() +{ + //remove GUI elements + RemoveGuiLabels(); + + //clear members if(m_StatusLabels != NULL && m_StatusLabels->size() > 0) - m_StatusLabels->clear(); + { + delete m_StatusLabels; + m_StatusLabels = new QVector< QLabel* >(); + } + if(m_NavigationDatas != NULL && m_NavigationDatas->size() > 0) - m_NavigationDatas->clear(); + { + delete m_NavigationDatas; + m_NavigationDatas = new std::vector(); + } } +void QmitkToolTrackingStatusWidget::RemoveGuiLabels() + { + while(m_Controls->m_GridLayout->count() > 0 || m_Controls->m_VerticalLayout->count() > 0) + { + if (m_Controls->m_GridLayout->count() > 0) + { + QWidget* actWidget = m_Controls->m_GridLayout->itemAt(0)->widget(); + m_Controls->m_GridLayout->removeWidget(actWidget); + delete actWidget; + } + else if (m_Controls->m_VerticalLayout->count() > 0) + { + QWidget* actWidget = m_Controls->m_VerticalLayout->itemAt(0)->widget(); + m_Controls->m_VerticalLayout->removeWidget(actWidget); + delete actWidget; + } + } + } + diff --git a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h index f75006fa97..18123a1263 100644 --- a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h +++ b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h @@ -1,107 +1,128 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-03-21 19:27:37 +0100 (Sa, 21 Mrz 2009) $ Version: $Revision: 16719 $ 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 _QmitkToolTrackingStatusWidget_H_INCLUDED #define _QmitkToolTrackingStatusWidget_H_INCLUDED #include "ui_QmitkToolTrackingStatusWidgetControls.h" #include "MitkIGTUIExports.h" #include +#include #include #include /*! \brief QmitkToolTrackingStatusWidget Widget for setting up and controlling an update timer in an IGT-Pipeline. */ class MitkIGTUI_EXPORT QmitkToolTrackingStatusWidget : public QWidget { Q_OBJECT // this is needed for all Qt objects that should have a MOC object (everything that derives from QObject) public: typedef std::vector< mitk::NavigationData::Pointer > NavigationDataPointerArray; - + enum Style + { + GridLowerStyle, + VerticalUpperStyle + }; /*! \brief default constructor */ QmitkToolTrackingStatusWidget( QWidget* parent ); + /*! \brief default destructor */ virtual ~QmitkToolTrackingStatusWidget(); /*! \brief Sets up the labels in this widget's QGridLayout for showing the track status of the tracking tools */ void ShowStatusLabels(); /*! \brief Sets the ND for this widget */ void SetNavigationDatas(std::vector* navDatas); void AddNavigationData(mitk::NavigationData::Pointer nd); /*! \brief Changes background color of status labels (green or red) to show if actual navigation data of each tool is valid. */ void Refresh(); /*! \brief Removes all status labels. */ void RemoveStatusLabels(); /** @brief Enables / disables if the tool positions are shown. Default is off.*/ void SetShowPositions(bool enable); /** @brief Sets the text alignment of the tool labels. Default is center. Example: Use Qt::AlignLeft for left alignment. */ void SetTextAlignment(Qt::AlignmentFlag alignment); + /** @brief Sets the alignment style of this widget: + * GridLowerStyle: Tool labels are at the lower side of the widget in grid alignment + * VerticalUpperStyle: Tool labels are at the upper side in a vertical alignment (default) + */ + void SetStyle(QmitkToolTrackingStatusWidget::Style newStyle); + + /** @brief Shows tool labels for the tools in the tool storage. This method can be called BEFORE connecting the navigation data to + * make a preview of the tools. + */ + void PreShowTools(mitk::NavigationToolStorage::Pointer toolStorage); + protected: void CreateConnections(); void CreateQtPartControl( QWidget *parent ); Ui::QmitkToolTrackingStatusWidgetControls* m_Controls; ///< gui widgets private: /*! \brief Vector for all tool tracking status labels. */ QVector< QLabel* >* m_StatusLabels; std::vector* m_NavigationDatas; bool m_ShowPositions; Qt::AlignmentFlag m_Alignment; + QmitkToolTrackingStatusWidget::Style m_Style; + + void RemoveGuiLabels(); + }; #endif // _QmitkToolTrackingStatusWidget_H_INCLUDED diff --git a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui index 103463f0f3..5fcbd61a4b 100644 --- a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui +++ b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui @@ -1,37 +1,40 @@ QmitkToolTrackingStatusWidgetControls 0 0 361 195 Form - + Qt::Vertical 20 40 + + +