diff --git a/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.cpp b/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.cpp index 0fc676269c..d5a91b80ac 100644 --- a/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.cpp +++ b/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.cpp @@ -1,399 +1,377 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ // Blueberry #include #include #include // mitk #include #include #include // Qt #include #include #include #include #include "QmitkDicomInspectorView.h" const std::string QmitkDicomInspectorView::VIEW_ID = "org.mitk.gui.qt.dicominspector"; QmitkDicomInspectorView::ObserverInfo::ObserverInfo(mitk::SliceNavigationController* controller, int observerTag, const std::string& renderWindowName, mitk::IRenderWindowPart* part) : controller(controller), observerTag(observerTag), renderWindowName(renderWindowName), renderWindowPart(part) { } -QmitkDicomInspectorView::QmitkDicomInspectorView() : -m_renderWindowPart(nullptr), -m_PendingSliceChangedEvent(false), -m_currentSelectedTimeStep(0), -m_currentSelectedZSlice(0), -m_SelectedNode(nullptr), -m_internalUpdateFlag(false) +QmitkDicomInspectorView::QmitkDicomInspectorView() + : m_RenderWindowPart(nullptr) + , m_PendingSliceChangedEvent(false) + , m_SelectedNode(nullptr) + , m_SelectedTimeStep(0) + , m_CurrentSelectedZSlice(0) { - m_currentSelectedPosition.Fill(0.0); + m_SelectedPosition.Fill(0.0); } QmitkDicomInspectorView::~QmitkDicomInspectorView() { this->RemoveAllObservers(); } +void QmitkDicomInspectorView::RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) +{ + if (m_RenderWindowPart != renderWindowPart) + { + m_RenderWindowPart = renderWindowPart; + + if (!InitObservers()) + { + QMessageBox::information(nullptr, "Error", "Unable to set up the event observers. The " \ + "plot will not be triggered on changing the crosshair, " \ + "position or time step."); + } + } +} + +void QmitkDicomInspectorView::RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) +{ + m_RenderWindowPart = nullptr; + this->RemoveAllObservers(renderWindowPart); +} + +void QmitkDicomInspectorView::CreateQtPartControl(QWidget* parent) +{ + // create GUI widgets from the Qt Designer's .ui file + m_Controls.setupUi(parent); + + m_Controls.singleSlot->SetDataStorage(GetDataStorage()); + m_Controls.singleSlot->SetSelectionIsOptional(true); + m_Controls.singleSlot->SetEmptyInfo(QString("Please select a data node")); + m_Controls.singleSlot->SetPopUpTitel(QString("Select data node")); + + m_SelectionServiceConnector = std::make_unique(); + SetAsSelectionListener(true); + + m_Controls.timePointValueLabel->setText(QString("")); + m_Controls.slieceNumberValueLabel->setText(QString("")); + + connect(m_Controls.singleSlot, &QmitkSingleNodeSelectionWidget::CurrentSelectionChanged, + this, &QmitkDicomInspectorView::OnCurrentSelectionChanged); + + mitk::IRenderWindowPart* renderWindowPart = GetRenderWindowPart(); + RenderWindowPartActivated(renderWindowPart); +} + bool QmitkDicomInspectorView::InitObservers() { bool result = true; typedef QHash WindowMapType; - WindowMapType windowMap = m_renderWindowPart->GetQmitkRenderWindows(); + WindowMapType windowMap = m_RenderWindowPart->GetQmitkRenderWindows(); auto i = windowMap.begin(); while (i != windowMap.end()) { mitk::SliceNavigationController* sliceNavController = i.value()->GetSliceNavigationController(); if (sliceNavController) { - itk::ReceptorMemberCommand::Pointer cmdSliceEvent = - itk::ReceptorMemberCommand::New(); + auto cmdSliceEvent = itk::SimpleMemberCommand::New(); cmdSliceEvent->SetCallbackFunction(this, &QmitkDicomInspectorView::OnSliceChanged); int tag = sliceNavController->AddObserver( - mitk::SliceNavigationController::GeometrySliceEvent(nullptr, 0), - cmdSliceEvent); + mitk::SliceNavigationController::GeometrySliceEvent(nullptr, 0), cmdSliceEvent); m_ObserverMap.insert(std::make_pair(sliceNavController, ObserverInfo(sliceNavController, tag, - i.key().toStdString(), m_renderWindowPart))); + i.key().toStdString(), m_RenderWindowPart))); - itk::ReceptorMemberCommand::Pointer cmdTimeEvent = - itk::ReceptorMemberCommand::New(); + auto cmdTimeEvent = itk::SimpleMemberCommand::New(); cmdTimeEvent->SetCallbackFunction(this, &QmitkDicomInspectorView::OnSliceChanged); tag = sliceNavController->AddObserver( - mitk::SliceNavigationController::GeometryTimeEvent(nullptr, 0), - cmdTimeEvent); + mitk::SliceNavigationController::GeometryTimeEvent(nullptr, 0), cmdTimeEvent); m_ObserverMap.insert(std::make_pair(sliceNavController, ObserverInfo(sliceNavController, tag, - i.key().toStdString(), m_renderWindowPart))); + i.key().toStdString(), m_RenderWindowPart))); - itk::MemberCommand::Pointer cmdDelEvent = - itk::MemberCommand::New(); - cmdDelEvent->SetCallbackFunction(this, - &QmitkDicomInspectorView::OnSliceNavigationControllerDeleted); - tag = sliceNavController->AddObserver( - itk::DeleteEvent(), cmdDelEvent); + auto cmdDelEvent = itk::MemberCommand::New(); + cmdDelEvent->SetCallbackFunction(this, &QmitkDicomInspectorView::OnSliceNavigationControllerDeleted); + tag = sliceNavController->AddObserver(itk::DeleteEvent(), cmdDelEvent); m_ObserverMap.insert(std::make_pair(sliceNavController, ObserverInfo(sliceNavController, tag, - i.key().toStdString(), m_renderWindowPart))); + i.key().toStdString(), m_RenderWindowPart))); } ++i; result = result && sliceNavController; } return result; } -void QmitkDicomInspectorView::RemoveObservers(const mitk::SliceNavigationController* - deletedSlicer) +void QmitkDicomInspectorView::RemoveObservers(const mitk::SliceNavigationController* deletedSlicer) { - - std::pair < ObserverMapType::const_iterator, ObserverMapType::const_iterator> obsRange = + std::pair obsRange = m_ObserverMap.equal_range(deletedSlicer); for (ObserverMapType::const_iterator pos = obsRange.first; pos != obsRange.second; ++pos) { pos->second.controller->RemoveObserver(pos->second.observerTag); } m_ObserverMap.erase(deletedSlicer); } void QmitkDicomInspectorView::RemoveAllObservers(mitk::IRenderWindowPart* deletedPart) { for (ObserverMapType::const_iterator pos = m_ObserverMap.begin(); pos != m_ObserverMap.end();) { ObserverMapType::const_iterator delPos = pos++; - if (deletedPart == nullptr || deletedPart == delPos->second.renderWindowPart) + if (nullptr == deletedPart || deletedPart == delPos->second.renderWindowPart) { delPos->second.controller->RemoveObserver(delPos->second.observerTag); m_ObserverMap.erase(delPos); } } } -void QmitkDicomInspectorView::OnSliceNavigationControllerDeleted(const itk::Object* sender, - const itk::EventObject& /*e*/) -{ - const mitk::SliceNavigationController* sendingSlicer = - dynamic_cast(sender); - - this->RemoveObservers(sendingSlicer); -} - -void QmitkDicomInspectorView::RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) -{ - if (m_renderWindowPart != renderWindowPart) - { - m_renderWindowPart = renderWindowPart; - - if (!InitObservers()) - { - QMessageBox::information(nullptr, "Error", "Unable to set up the event observers. The " \ - "plot will not be triggered on changing the crosshair, " \ - "position or time step."); - } - } -} - -void QmitkDicomInspectorView::RenderWindowPartDeactivated( - mitk::IRenderWindowPart* renderWindowPart) -{ - m_renderWindowPart = nullptr; - this->RemoveAllObservers(renderWindowPart); -} - -void QmitkDicomInspectorView::CreateQtPartControl(QWidget* parent) -{ - // create GUI widgets from the Qt Designer's .ui file - m_Controls.setupUi(parent); - - m_Controls.singleSlot->SetDataStorage(GetDataStorage()); - m_Controls.singleSlot->SetSelectionIsOptional(true); - m_Controls.singleSlot->SetEmptyInfo(QString("Please select a data node")); - m_Controls.singleSlot->SetPopUpTitel(QString("Select data node")); - - m_SelectionServiceConnector = std::make_unique(); - SetAsSelectionListener(true); - - m_Controls.timePointValueLabel->setText(QString("")); - m_Controls.slieceNumberValueLabel->setText(QString("")); - - connect(m_Controls.singleSlot, &QmitkSingleNodeSelectionWidget::CurrentSelectionChanged, - this, &QmitkDicomInspectorView::OnCurrentSelectionChanged); - - mitk::IRenderWindowPart* renderWindowPart = GetRenderWindowPart(); - RenderWindowPartActivated(renderWindowPart); -} - -void QmitkDicomInspectorView::SetFocus() -{ -} - void QmitkDicomInspectorView::OnCurrentSelectionChanged(QList nodes) { if (nodes.empty() || nodes.front().IsNull()) { m_SelectedNode = nullptr; m_SelectedData = nullptr; UpdateData(); return; } if (nodes.front() == this->m_SelectedNode) { // nothing to change return; } // node is selected, create DICOM tag table m_SelectedNode = nodes.front(); m_SelectedData = this->m_SelectedNode->GetData(); - m_selectedNodeTime.Modified(); + m_SelectedNodeTime.Modified(); UpdateData(); OnSliceChangedDelayed(); } +void QmitkDicomInspectorView::OnSliceChanged() +{ + // Taken from QmitkStdMultiWidget::HandleCrosshairPositionEvent(). + // Since there are always 3 events arriving (one for each render window) every time the slice + // or time changes, the slot OnSliceChangedDelayed is triggered - and only if it hasn't been + // triggered yet - so it is only executed once for every slice/time change. + if (!m_PendingSliceChangedEvent) + { + m_PendingSliceChangedEvent = true; + + QTimer::singleShot(0, this, SLOT(OnSliceChangedDelayed())); + } +} + +void QmitkDicomInspectorView::OnSliceNavigationControllerDeleted(const itk::Object* sender, const itk::EventObject& /*e*/) +{ + auto sendingSlicer = dynamic_cast(sender); + + this->RemoveObservers(sendingSlicer); +} + void QmitkDicomInspectorView::ValidateAndSetCurrentPosition() { mitk::Point3D currentSelectedPosition = GetRenderWindowPart()->GetSelectedPosition(nullptr); unsigned int currentSelectedTimeStep = GetRenderWindowPart()->GetTimeNavigationController()->GetTime()->GetPos(); - if (m_currentSelectedPosition != currentSelectedPosition - || m_currentSelectedTimeStep != currentSelectedTimeStep - || m_selectedNodeTime > m_currentPositionTime) + if (m_SelectedPosition != currentSelectedPosition + || m_SelectedTimeStep != currentSelectedTimeStep + || m_SelectedNodeTime > m_CurrentPositionTime) { - //the current position has been changed or the selected node has been changed since the last position validation -> check position - m_currentSelectedPosition = currentSelectedPosition; - m_currentSelectedTimeStep = currentSelectedTimeStep; - m_currentPositionTime.Modified(); - m_validSelectedPosition = false; + // the current position has been changed or the selected node has been changed since + // the last position validation -> check position + m_SelectedPosition = currentSelectedPosition; + m_SelectedTimeStep = currentSelectedTimeStep; + m_CurrentPositionTime.Modified(); + m_ValidSelectedPosition = false; if (m_SelectedData.IsNull()) { return; } mitk::BaseGeometry::Pointer geometry = m_SelectedData->GetTimeGeometry()->GetGeometryForTimeStep( - m_currentSelectedTimeStep); + m_SelectedTimeStep); // check for invalid time step if (geometry.IsNull()) { geometry = m_SelectedData->GetTimeGeometry()->GetGeometryForTimeStep(0); } if (geometry.IsNull()) { return; } - m_validSelectedPosition = geometry->IsInside(m_currentSelectedPosition); + m_ValidSelectedPosition = geometry->IsInside(m_SelectedPosition); itk::Index<3> index; - geometry->WorldToIndex(m_currentSelectedPosition, index); + geometry->WorldToIndex(m_SelectedPosition, index); - m_currentSelectedZSlice = index[2]; - } -} - -void QmitkDicomInspectorView::OnSliceChanged(const itk::EventObject&) -{ - // Taken from QmitkStdMultiWidget::HandleCrosshairPositionEvent(). - // Since there are always 3 events arriving (one for each render window) every time the slice - // or time changes, the slot OnSliceChangedDelayed is triggered - and only if it hasn't been - // triggered yet - so it is only executed once for every slice/time change. - if (!m_PendingSliceChangedEvent) - { - m_PendingSliceChangedEvent = true; - - QTimer::singleShot(0, this, SLOT(OnSliceChangedDelayed())); + m_CurrentSelectedZSlice = index[2]; } } void QmitkDicomInspectorView::OnSliceChangedDelayed() { m_PendingSliceChangedEvent = false; ValidateAndSetCurrentPosition(); - m_Controls.tableTags->setEnabled(m_validSelectedPosition); + m_Controls.tableTags->setEnabled(m_ValidSelectedPosition); if (m_SelectedNode.IsNotNull()) { RenderTable(); } } void QmitkDicomInspectorView::RenderTable() { - assert(m_renderWindowPart != nullptr); + assert(nullptr != m_RenderWindowPart); // configure fit information unsigned int rowIndex = 0; for (const auto& element : m_Tags) { - QTableWidgetItem* newItem = new QTableWidgetItem(QString::fromStdString(element.second.prop->GetValue(m_currentSelectedTimeStep, m_currentSelectedZSlice, true, true))); + QTableWidgetItem* newItem = new QTableWidgetItem(QString::fromStdString( + element.second.prop->GetValue(m_SelectedTimeStep, m_CurrentSelectedZSlice, true, true))); m_Controls.tableTags->setItem(rowIndex, 3, newItem); ++rowIndex; } UpdateLabels(); } void QmitkDicomInspectorView::UpdateData() { QStringList headers; m_Controls.tableTags->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); m_Tags.clear(); if (m_SelectedData.IsNotNull()) { for (const auto& element : *(m_SelectedData->GetPropertyList()->GetMap())) { if (element.first.find("DICOM") == 0) { std::istringstream stream(element.first); std::string token; std::getline(stream, token, '.'); //drop the DICOM suffix std::getline(stream, token, '.'); //group id unsigned long dcmgroup = std::stoul(token, nullptr, 16); std::getline(stream, token, '.'); //element id unsigned long dcmelement = std::stoul(token, nullptr, 16); TagInfo info(mitk::DICOMTag(dcmgroup, dcmelement), dynamic_cast(element.second.GetPointer())); m_Tags.insert(std::make_pair(element.first, info)); } } } m_Controls.tableTags->setRowCount(m_Tags.size()); unsigned int rowIndex = 0; for (const auto& element : m_Tags) { QTableWidgetItem* newItem = new QTableWidgetItem(QString::number(element.second.tag.GetGroup(), 16)); m_Controls.tableTags->setItem(rowIndex, 0, newItem); newItem = new QTableWidgetItem(QString::number(element.second.tag.GetElement(), 16)); m_Controls.tableTags->setItem(rowIndex, 1, newItem); newItem = new QTableWidgetItem(QString::fromStdString(element.second.tag.GetName())); m_Controls.tableTags->setItem(rowIndex, 2, newItem); newItem = new QTableWidgetItem(QString::fromStdString(element.second.prop->GetValue())); m_Controls.tableTags->setItem(rowIndex, 3, newItem); ++rowIndex; } + UpdateLabels(); } void QmitkDicomInspectorView::UpdateLabels() { if (m_SelectedData.IsNull()) { - if (m_SelectedNode.IsNotNull()) - { - //m_Controls.labelNode->setText(QString("INVALIDE NODE")); - } - else - { - //m_Controls.labelNode->setText(QString("select node...")); - } m_Controls.timePointValueLabel->setText(QString("")); m_Controls.slieceNumberValueLabel->setText(QString("")); } else { - if (m_validSelectedPosition) + if (m_ValidSelectedPosition) { - m_Controls.timePointValueLabel->setText(QString::number(m_currentSelectedTimeStep)); - m_Controls.slieceNumberValueLabel->setText(QString::number(m_currentSelectedZSlice)); + m_Controls.timePointValueLabel->setText(QString::number(m_SelectedTimeStep)); + m_Controls.slieceNumberValueLabel->setText(QString::number(m_CurrentSelectedZSlice)); } else { m_Controls.timePointValueLabel->setText(QString("outside data geometry")); m_Controls.slieceNumberValueLabel->setText(QString("outside data geometry")); } } } void QmitkDicomInspectorView::SetAsSelectionListener(bool checked) { if (checked) { m_SelectionServiceConnector->AddPostSelectionListener(GetSite()->GetWorkbenchWindow()->GetSelectionService()); connect(m_SelectionServiceConnector.get(), &QmitkSelectionServiceConnector::ServiceSelectionChanged, m_Controls.singleSlot, &QmitkSingleNodeSelectionWidget::SetCurrentSelection); } else { m_SelectionServiceConnector->RemovePostSelectionListener(); disconnect(m_SelectionServiceConnector.get(), &QmitkSelectionServiceConnector::ServiceSelectionChanged, m_Controls.singleSlot, &QmitkSingleNodeSelectionWidget::SetCurrentSelection); } } diff --git a/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.h b/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.h index 0a64e0378d..8746fa6126 100644 --- a/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.h +++ b/Plugins/org.mitk.gui.qt.dicominspector/src/internal/QmitkDicomInspectorView.h @@ -1,164 +1,155 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ - #ifndef QmitkDicomInspectorView_h #define QmitkDicomInspectorView_h #include "ui_QmitkDicomInspectorViewControls.h" // Blueberry #include // mitk DICOMReader module #include #include // mitk gui common plugin #include // mitk gui qt common plugin #include -#include "QmitkSelectionServiceConnector.h" +#include /** - * @brief View class defining the UI part of the ModelFitVisualization plug-in. + * @brief View class to inspect all DICOM tags available for the data of a node. */ -class QmitkDicomInspectorView : - public QmitkAbstractView, - public mitk::IRenderWindowPartListener +class QmitkDicomInspectorView : public QmitkAbstractView, public mitk::IRenderWindowPartListener { Q_OBJECT public: QmitkDicomInspectorView(); ~QmitkDicomInspectorView() override; static const std::string VIEW_ID; - protected slots: + void SetFocus() override { }; - /** - * @brief Triggered when the voxel or time step selection changes. - * Calculates the curve and points for the current fit if the visualization is running. - */ - void OnSliceChangedDelayed(); + void RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) override; + void RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) override; protected: void CreateQtPartControl(QWidget* parent) override; - void SetFocus() override; + /** @brief Initializes and sets the observers that are used to monitor changes in the selected position + or time point in order to actualize the view*/ + bool InitObservers(); - /** @brief called by the selection widget when the selection has changed */ - void OnCurrentSelectionChanged(QList nodes); + /** @brief Removes all observers of the specific deleted slice navigation controller.*/ + void RemoveObservers(const mitk::SliceNavigationController* deletedSlicer); - /** @brief Calls OnSliceChangedDelayed so the event isn't triggered multiple times. */ - void OnSliceChanged(const itk::EventObject& e); + /** @brief Removes all observers of the deletedPart. If null pointer is passed all observers will be removed.*/ + void RemoveAllObservers(mitk::IRenderWindowPart* deletedPart = nullptr); - void OnSliceNavigationControllerDeleted(const itk::Object* sender, const itk::EventObject& /*e*/); + /** @brief Called by the selection widget when the selection has changed.*/ + void OnCurrentSelectionChanged(QList nodes); - void RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) override; - void RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) override; + /** @brief Calls OnSliceChangedDelayed so the event isn't triggered multiple times.*/ + void OnSliceChanged(); - /** Initializes and sets the observers that are used to monitor changes in the selected position - or time point in order to actualize the view.h*/ - bool InitObservers(); - void RemoveObservers(const mitk::SliceNavigationController* deletedSlicer); - /** Removes all observers of the deletedPart. If null pointer is passed all observers will be removed.*/ - void RemoveAllObservers(mitk::IRenderWindowPart* deletedPart = nullptr); + void OnSliceNavigationControllerDeleted(const itk::Object* sender, const itk::EventObject& /*e*/); - /** Sets m_currentSelectedPosition to the current selection and validates if this position is valid + /** @brief Sets m_currentSelectedPosition to the current selection and validates if this position is valid * for the input image of the currently selected fit. If it is valid, m_validSelectedPosition is set to true. * If the fit, his input image or geometry is not specified, it will also handled as invalid.*/ void ValidateAndSetCurrentPosition(); +private Q_SLOTS: + + /** @brief Updates the current slice and time is correctly displayed.*/ + void OnSliceChangedDelayed(); + +private: + + void RenderTable(); + + /** (Re-)initializes the headers of the data table.*/ + void UpdateData(); + void UpdateLabels(); + + void SetAsSelectionListener(bool checked); + Ui::QmitkDicomInspectorViewControls m_Controls; - mitk::IRenderWindowPart* m_renderWindowPart; + mitk::IRenderWindowPart* m_RenderWindowPart; std::unique_ptr m_SelectionServiceConnector; - // Needed for observing the events for when a slice or time step is changed. + /** Needed for observing the events for when a slice or time step is changed.*/ bool m_PendingSliceChangedEvent; - /**Helper structure to manage the registered observer events.*/ + /** Helper structure to manage the registered observer events.*/ struct ObserverInfo { mitk::SliceNavigationController* controller; int observerTag; std::string renderWindowName; mitk::IRenderWindowPart* renderWindowPart; ObserverInfo(mitk::SliceNavigationController* controller, int observerTag, const std::string& renderWindowName, mitk::IRenderWindowPart* part); }; typedef std::multimap ObserverMapType; ObserverMapType m_ObserverMap; - /** @brief currently valid selected position in the inspector*/ - mitk::Point3D m_currentSelectedPosition; - /** @brief indicates if the currently selected position is valid for the currently selected fit. - * This it is within the input image */ - bool m_validSelectedPosition; - - unsigned int m_currentSelectedTimeStep; - - itk::IndexValueType m_currentSelectedZSlice; - - /** @brief currently selected node for the DICOM information*/ + /** @brief Currently selected node for the DICOM information.*/ mitk::DataNode::ConstPointer m_SelectedNode; - + /** @brief Base data of the currently selected node.*/ mitk::BaseData::ConstPointer m_SelectedData; - /** @brief Is a visualization currently running? */ - bool m_internalUpdateFlag; - /** @brief Number of interpolation steps between two x values */ - static const unsigned int INTERPOLATION_STEPS; + /** @brief Valid selected position in the inspector.*/ + mitk::Point3D m_SelectedPosition; + /** @brief Indicates if the currently selected position is valid for the currently selected data.*/ + bool m_ValidSelectedPosition; + + unsigned int m_SelectedTimeStep; + + itk::IndexValueType m_CurrentSelectedZSlice; /*************************************/ /* Members for visualizing the model */ - itk::TimeStamp m_selectedNodeTime; - itk::TimeStamp m_currentFitTime; - itk::TimeStamp m_currentPositionTime; - itk::TimeStamp m_lastRefreshTime; + itk::TimeStamp m_SelectedNodeTime; + itk::TimeStamp m_CurrentPositionTime; /**Helper structure to manage the registered observer events.*/ struct TagInfo { mitk::DICOMTag tag; mitk::DICOMProperty::ConstPointer prop; - TagInfo(const mitk::DICOMTag& aTag, mitk::DICOMProperty::ConstPointer aProp) : tag(aTag), prop(aProp) + TagInfo(const mitk::DICOMTag& aTag, mitk::DICOMProperty::ConstPointer aProp) + : tag(aTag) + , prop(aProp) { }; }; typedef std::map TagMapType; TagMapType m_Tags; - void RenderTable(); - - /** (re)initializes the headers of the data table*/ - void UpdateData(); - void UpdateLabels(); - -private: - - void SetAsSelectionListener(bool checked); - }; #endif // QmitkDicomInspectorView_h